您的答案為: 16825488888888884772 ...略
正確答案為: 127087881097000
各種測試都OK,不知錯在哪裡?
<測試資料> 012 0012 2 22222 9999999999 9999999999 12456987456321457896547895 49874654654132132135465479564654654 | | <結果> 144 44444 99999999980000000001 621287947414888590154197968471913810427865963967524445653330 |
請指導
#include <iostream>
#include <string.h>
using namespace std;
int A[260],B[260],Q[260];
//---測試用-----------------------------------------
void pP(int *q){
for(int i=50; i>=0; i--) cout<<q[i];
cout<<endl;
}
//--------------------------------------------
void Multi(char* a, char* b){
int i,k,la,lb,carry;
memset(Q,0,sizeof(Q));
la=strlen(a); lb=strlen(b);
for(int i=la-1; i>=0; i--) A[i]=a[la-i-1]-'0';
for(int i=lb-1; i>=0; i--) B[i]=b[lb-i-1]-'0';
for(k=lb-1; k>=0; k--){
int xb=B[k]; carry=0; //取出一個數字
for(i=0; i<250; i++){
int tmp=A[i]*xb+Q[i]+carry;
if(tmp>9){ Q[i]=tmp%10; carry=tmp/10; }
else { Q[i]=tmp; carry=0; }
}
if(k>0){
for(i=249; i>=0; i--) Q[i+1]=Q[i]; //上移一位
Q[0]=0;
}
//pP(A); pP(B); pP(Q);
}
}
//============================================
int main() {
char a[260],b[260];
while(scanf("%s\n%s\n",a,b)==2){
if(strlen(a)<strlen(b)) Multi(b,a); //大數在前
else Multi(a,b);
int k=250;
while(k>0){ //不顯示前面的 0
if(Q[k]!=0) break;
k--;
}
for(int i=k; i>=0; i--) printf("%d",Q[i]);
cout<<endl;
}
}