昨天剛寫了個大數加法,今天又來了個大數乘法,其實解法差不多,只不過換成了好多個大數的相加而
已,看別人的算法其實跟我的也差不多,都是這個姿勢。wa了一次,竟然忘了考慮0的情況,以後交題之前,都要判
斷一下邊緣數據,大數據和小數據,要不就是白白被扣時間啊,另外還要注意的是變量不要重復定義!!!除非在調用函數裡,要不很容易出錯的!!!
#include#include #include #include using namespace std; char a[300];//存放輸入的第一組數據 char b[300];// 存放輸入的第二組數據 int c[600];//存放每一位數與另一組數據相乘後的結果 int d[600];//用來保存已經計算過的每一位數與b相乘之後的和 void solve(char c[])//將輸入的數據翻轉 { char t; int len=strlen(c); for(int i=0; i<=(len-1)/2; i++) { t=c[i]; c[i]=c[len-1-i]; c[len-1-i]=t; } } int main() { int i,j,x,k,q,up,up1,max1; while(scanf("%s%s",a,b)!=EOF) { if(strcmp(a,"0")==0||strcmp(b,"0")==0)//處理輸入是0的情況 { printf("0\n"); continue; } memset(d,0,sizeof(d)); memset(c,0,sizeof(c)); solve(a); solve(b); int lena=strlen(a); int lenb=strlen(b); max1=k=0; for(i=0;i =k) c[q]=0; d[q]=c[q]+d[q]+up; up=d[q]/10; d[q]=d[q]%10; } if(up!=0) d[max1++]=up;//d數組存放前i位數分別與b相乘後的和 } int flag=1; for(j=max1-1;j>=0;j--) { if(flag==1&&d[j]==0)//用來處理前導0問題 continue; printf("%d",d[j]); flag=0; } printf("\n"); } }