高精乘法 ----------------------------------------------------------------------- 先寫個兩個數的乘積 有空改爲個多個數的積 ----------------------------------------------------------------------- #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] ; 注意格式的控制 這裏得開兩個數組