1. 程式人生 > >輸入兩個很大的正數(用C字符串表示),輸出他們的乘積,將設不考慮非法輸入。

輸入兩個很大的正數(用C字符串表示),輸出他們的乘積,將設不考慮非法輸入。

十進制數 free pre class 兩個 int 字符數組 正數 轉換

 1 #include<iostream>
 2 #include<cassert>
 3 void multiply(const char *a,const char *b)
 4 {
 5     assert(a!=NULL && b!=NULL);
 6     int i,j,ca,cb,*s;
 7     ca=strlen(a);
 8     cb=strlen(b);
 9     s=(int *)malloc(sizeof(int)*(ca+cb));  //分配存儲空間
10     for(i=0;i<ca+cb;i++)
11 s[i]=0; //每個元素賦初值為0 12 13 14 for(i=0;i<ca;i++) 15 for(j=0;j<cb;j++) 16 s[i+j+1]+=(a[i]-0)*(b[j]-0); //兩個嵌套的for循環,將字符串中的數字通過-‘0’ 17 for(i=ca+cb-1;i>=0;i--) //轉換為十進制數字 18 if(s[i]>=10) 19 {
20 s[i-1]+=s[i]/10; 21 s[i]%=10; 22 } 23
24 char *c=(char *)malloc((ca+cb)*sizeof(char)); 25 i=0; 26 while(s[i]==0) 27 i++; 28 for(j=0;i<ca+cb;i++,j++) //將十進制數字轉換為字符,存儲到字符數組中 29 c[j]=s[i]+0; 30 c[j]=
\0; 31 for(i=0;i<ca+cb;i++) 32 std::cout<<c[i]; 33 std::cout<<std::endl; 34 free(s); 35 free(c); 36 } 37 38 int main() 39 { 40 const char *strnum1="123"; 41 const char *strnum2="456"; 42 multiply(strnum1,strnum2); 43 return 0; 44 }

輸入兩個很大的正數(用C字符串表示),輸出他們的乘積,將設不考慮非法輸入。