【題目描述】 輸入兩個高精度正整數M和N(M和N均小於100位)。求這兩個高精度數的積。 【輸入】 輸入兩個高精度正整數M和N。 【輸出】 求這兩個高精度數的積。 【輸入樣例】 36 3 【輸出樣例】 108
#include<iostream> #include<cstring> #include<string> using namespace std; char s1[256],s2[256]; int a[256],b[256],c[256]; int main() { cin>>s1; cin>>s2; int lena,lenb,i,j,lenc; lena=strlen(s1); lenb=strlen(s2); for(i=0;i<=lena;i++) //將字符串轉換為數字逆序存入數組中 a[lena-i]=s1[i]-'0'; for(i=0;i<=lenb;i++) b[lenb-i]=s2[i]-'0'; for(i=1;i<=lenb;i++) //外層循環當做乘數;雙層循環跑起來,不僅次次進位,還把乘數相加起來進位(相當於列豎式數字相加) { int x=0; //用來進位的,外循環結束一遍后進位x要歸零處理 for(j=1;j<=lena;j++) //內存循環跑乘法,也要注意進位 { c[i+j-1]=c[i+j-1]+x+a[j]*b[i]; //此位=此位加上進的位x+ab乘積 x=c[i+j-1]/10; //進前位,所以除以10 c[i+j-1]=c[i+j-1]%10; //對10取余,留下本位的 } c[i+lena]=x; //內層循環跑完(b乘完了a的各個位),x應進到下一位 } lenc=lena+lenb; while((c[lenc]==0)&&(lenc>1)) //去掉前導零 lenc--; for(i=lenc;i>=1;i--) //逆序輸出c數組 cout<<c[i]; cout<<endl; return 0; }
大數用字符數組輸入,將各個數位轉化為數值存入數組中;雙層循環中的乘法是反過來乘的;