乘法 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    高精乘法

    -----------------------------------------------------------------------

    先写个两个数的乘积 有空改成个多个数的积

    -----------------------------------------------------------------------

    #include

    #include

    int i, j, k;

    char a1[50], a2[50];

    int s1[50], s2[50];

    int s[100];

    void mul(int *s1, int *s2, int *s) {

    for (i=0; i

    for (j=0; j

    s[i+j]+=s1[i]*s2[j];

    int k=100;

    while (!s[k])

    --k;

    for (i=0,j=0; i<=k; i++) {

    s[i+1]+=s[i]/10;

    s[i]%=10;

    }

    }

    int main() {

    gets(a1);

    gets(a2);  int m=strlen(a1)+strlen(a2);

    for (i=strlen(a1)-1; i>=0; --i)

    s1[i]=(a1[strlen(a1)-i-1]-'0');

    for (i=strlen(a2)-1; i>=0; --i)

    s2[i]=(a2[strlen(a2)-i-1]-'0');

    for (i=0; i<100; i++)

    s[i]=0;

    mul(s1, s2, s);

    for (i=m-1; i>=0; --i)//

    printf("%d", s[i]); system("pause");

    }

    ---------------------------------------------

    1010101010101010101

    1010101010101010101

    输出1020304050607080910090807060504030201

    ----------------------------------------------

    -----------------------------------------------

    输入任意整数!!!!!!!!!辛苦修改 !!!!!!

    #include

    #include

    int i, j, k;

    char a1[100], a2[100];

    int s1[1000], s2[100];

    int s[1000];

    int temp=1;

    int main() {

    gets(a1);

    for (i=strlen(a1)-1; i>=0; --i)

    s1[i]=(a1[strlen(a1)-i-1]-'0');

    //上面的  是取得s1 然后转为int 数组

    int m=strlen(a1);//提前算出a1 长度

    while (gets(a2), strcmp(a2, "~")) {  //遇到~结束

    for (i=strlen(a2)-1; i>=0; --i)

    s2[i]=(a2[strlen(a2)-i-1]-'0');

    for (i=0; i<100; i++)

    s[i]=0;///s  初始化 开始计算了

    for (i=0; i

    for (j=0; j

    s[i+j]+=s1[i]*s2[j];//开始计算了  结果保存到 s中

    int k=1000;

    while (!s[k])

    --k;

    // 算出s中的有效位数

    m=m+strlen(a2);

    for (i=0; i<=k; i++) {

    s[i+1]+=s[i]/10;

    s[i]%=10;

    }

    for (i=0; i

    s1[i]=s[i];

    // temp++;  两个数乘前面多两个个零  三个数乘后面多三个零 不知道为什么  只能放个temp在这里  使后面少输出temp位

    }

    for (i=m; i>=0; --i)  //这里改成i=m-temp 就可以少输出前面的temp位  但是发现最前面如果要进位的话就会被去掉了  无奈,

乘法

电脑资料

乘法》(https://www.unjs.com)。。。。。

    printf("%d", s1[i]);

    }

    改起来麻烦 所以就没用函数  有点美中不足 前面的零不好去掉!。。。 输入两个数前面两个零 输入三个数 前面多三个零

    --------------------------------------------------------------------

    999999999999999

    999999999999999

    999999999999999

    999999999999999

    ~

    输出 0999999999999996000000000000005999999999999996000000000000001

    -------------------------------------------------------------------------------------------终于完了 虽然写的很丑~~~~~~~  

最新文章