高精度乘法(1174:大整數乘法)
阿新 • • 發佈:2019-01-04
#include<cstdio> #include<cstring> using namespace std; int main() { char a[205],b[205]; int aa[205]={0},bb[205]={0},c[205]={0}; gets(a); int la=strlen(a); gets(b); int lb=strlen(b); for(int i=0;i<la;i++) { aa[la-i]=a[i]-'0'; } for(int i=0;i<lb;i++) { bb[lb-i]=b[i]-'0'; } int x; for(int i=1;i<=la;i++) { x=0;//僅在同一位上有進位 for(int j=1;j<=lb;j++) { c[i+j-1]=c[i+j-1]+aa[i]*bb[j]+x; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lb]=x;//進位,i的大小決定豎式中空幾格 } int lc=la+lb;//? while (c[lc]==0&&lc>1) lc--;//表示最高位的0,即去前導 for(int i=lc;i>=1;i--) { printf("%d",c[i]); } return 0; }
難點在於:
- 多次進位和加法
- 最後位數的計算