1. 程式人生 > >2980 大整數乘法

2980 大整數乘法

沒有 程序代碼 pre != return 註意 string str1 改變

題目來源:
http://bailian.openjudge.cn/practice/2980/
描述
求兩個不超過200位的非負整數的積。
輸入
有兩行,每行是一個不超過200位的非負整數,沒有多余的前導0。
輸出
一行,即相乘後的結果。結果裏不能有多余的前導0,即如果結果是342,那麽就不能輸出為0342。
樣例輸入
12345678900
98765432100
樣例輸出
1219326311126352690000
題意描述:
計算兩個位數不超過200的非負整數的乘積
解題思路:
先將str1和str2逆置
根據規律計算,再統一處理進位
去除前導零輸出即可
程序代碼:

 1 #include<stdio.h>
 2 const int N=230;
 3 #include<string
.h> 4 int main() 5 { 6 char str1[N],str2[N]; 7 int a[N],b[N],result[2*N],i,j,k,l1,l2; 8 while(scanf("%s%s",str1,str2) != EOF) 9 { 10 l1=strlen(str1); 11 l2=strlen(str2); 12 for(j=0,i=l1-1;i>=0;i--) 13 a[j++]=str1[i]-0; 14 for(j=0
,i=l2-1;i>=0;i--) 15 b[j++]=str2[i]-0; 16 //乘積 17 memset(result,0,sizeof(result)); 18 for(i=0;i<l1;i++) 19 for(j=0;j<l2;j++) 20 result[i+j] += a[i]*b[j]; 21 //處理進位 22 for(i=0;i<N*2;i++) { 23 if(result[i] > 9
)//先計算進位,否則前面的值先改變,不能進位 24 { 25 result[i+1] += result[i] / 10 ; 26 result[i] %= 10; 27 } 28 } 29 //輸出 30 for(i=2*N-1;i>=0;i--)//註意計數變量的自增與自減 ,i的初始值為2倍的再減1 31 { 32 if( result[i] != 0 ) 33 break; 34 } 35 for(j=i;j>=1;j--) 36 printf("%d",result[j]); 37 printf("%d\n",result[0]); 38 } 39 return 0; 40 }


易錯分析:
1、註意數組越界(2*N-1處)

2980 大整數乘法