#15444: 這是甚麼情況?


hshua (hshua)

學校 : 新北市立林口高級中學
編號 : 52506
來源 : [125.228.147.181]
最後登入時間 :
2024-11-19 08:27:35
d380. 10106 - Product -- UVa10106 | From: [61.219.36.76] | 發表日期 : 2018-10-06 09:40

這是甚麼情況?

#0: 100% WA (line:3)

您的答案為: 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;
    }
}
 
ZeroJudge Forum