高精乘法 ----------------------------------------------------------------------- 先写个两个数的乘积 有空改为个多个数的积 ----------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> 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<strlen(a1); i++) for (j=0; j<strlen(a2); 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 <stdio.h> #include <stdlib.h> 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<m; i++) for (j=0; j<strlen(a2); 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<m; ++i) s1[i]=s[i]; // temp++; 两个数乘前面多两个个零 三个数乘后面多三个零 不知道为何 只能放个temp在这里 使后面少输出temp位 } for (i=m; i>=0; --i) //这里改为i=m-temp 就能够少输出前面的temp位 可是发现最前面若是要进位的话就会被去掉了 无奈。。。。。 printf("%d", s1[i]); } 改起来麻烦 因此就没用函数 有点美中不足 前面的零很差去掉!。。。 输入两个数前面两个零 输入三个数 前面多三个零 -------------------------------------------------------------------- 999999999999999 999999999999999 999999999999999 999999999999999 ~ 输出 0999999999999996000000000000005999999999999996000000000000001 -------------------------------------------------------------------------------------------终于完了 虽然写的很丑~~~~~~~ 总结 :方法相似于加法 除了这里 s[i+j]+=s1[i]*s2[j] ; 注意格式的控制 这里得开两个数组