hdu 1002 为什么一直WA?

#include<stdio.h>#include<string.h>#defineMAX_LEN1000intx[MAX_LEN+10];inty[MAX_LEN+10... #include <stdio.h>

#include <string.h>

#define MAX_LEN 1000

int x[MAX_LEN + 10];

int y[MAX_LEN + 10];

int sum[MAX_LEN + 10];

char a[MAX_LEN + 10];

char b[MAX_LEN + 10];

int nLen1,nLen2;

int main(){

int n,Case=1;//c表示进位。

int i,j,ok;

scanf("%d",&n);

while(n--){

memset(x, 0, sizeof(x));

memset(y, 0, sizeof(y));

scanf("%s",a);

scanf("%s",b);

printf("Case %d:\n",Case);

printf("%s + %s = ",a,b);

j=0;

for (i=(strlen(a)-1); i>=0;i-- ) {

x[j]=a[i]-'0';

j++;

}

j=0;

for (i=(strlen(b)-1); i>=0;i-- ) {

y[j]=b[i]-'0';

j++;

}

memset(sum, 0, sizeof(sum));

for (i=0; i<(MAX_LEN+10); i++) {

sum[i]=x[i]+y[i];

if (x[i]+y[i]>10) {

sum[i] -= 10;

sum[i+1]++;

}

}

ok=0;

for (i=MAX_LEN; i>=0; i--) {

if (sum[i]!=0) {

ok=1;

}

if (ok==1) {

printf("%d",sum[i]);

}

}

printf("\n");

if (n!=0) {

printf("\n");

}

Case++;

}

return 0;

}
后来我又补充了0 0的情况,可是还是一直WA.
展开
 我来答
军天下wolfer
2013-11-27 · TA获得超过2081个赞
知道小有建树答主
回答量:734
采纳率:100%
帮助的人:930万
展开全部

#include <stdio.h>

#include <string.h>

#define MAX_LEN 1000

int x[MAX_LEN + 10];

int y[MAX_LEN + 10];

int sum[MAX_LEN + 10];

char a[MAX_LEN + 10];

char b[MAX_LEN + 10];

int nLen1,nLen2;

int main(){

    int n,Case=1;//c表示进位。

    int i,j,ok;

    scanf("%d",&n);

    while(n--){

        memset(x, 0, sizeof(x));

        memset(y, 0, sizeof(y));

scanf("%s",a);

        scanf("%s",b);

        printf("Case %d:\n",Case);

        printf("%s + %s = ",a,b);

j=0;

        for (i=(strlen(a)-1); i>=0;i-- ) {

            x[j]=a[i]-'0';

            j++;

        }

j=0;

        for (i=(strlen(b)-1); i>=0;i-- ) {

            y[j]=b[i]-'0';

            j++;

        }

memset(sum, 0, sizeof(sum));

for (i=0; i<(MAX_LEN+10); i++) {

            sum[i]+=x[i]+y[i];// 这里是sum[i]+=x[i]+y[i],如果是sum[i]=x[i]+y[i]则会把进位丢掉

            if (sum[i]>=10) {// 这里是sum[i]>=10,每一位都是0-9的。改后就AC了。

                sum[i] -= 10;

                sum[i+1]++;

            }
        }

        ok=0;

        for (i=MAX_LEN; i>=0; i--) {

            if (sum[i]!=0) {

                ok=1;

            }

            if (ok==1) {

                printf("%d",sum[i]);

            }

        }

        printf("\n");

        if (n!=0) {

            printf("\n");

        }

        Case++;
}

    return 0;

}

这是AC的代码哈,你看一下。满意请采纳。

仍诗兰xF
2013-12-06 · 超过28用户采纳过TA的回答
知道答主
回答量:158
采纳率:0%
帮助的人:71.8万
展开全部
#include<iostream>
using namespace std;
#include<string.h>
int main(){
    char s1[2000],s2[2000];
    int a[10000],count=0;
    int nCase;
    scanf("%d",&nCase);
    getchar();
    for(count=1;count<=nCase;count++){
        scanf("%s%s",s1,s2);
        getchar();
        int l1=strlen(s1)-1;
        int l2=strlen(s2)-1;
        int l=0;
        while(l1>=0&&l2>=0)
            a[l++]=s1[l1--]-'0'+s2[l2--]-'0';
            while(l1>=0)
                a[l++]=s1[l1--]-'0';
            while(l2>=0)
                a[l++]=s2[l2--]-'0';
        for(int i=0;i<l-1;i++)
            if(a[i]>=10){
                a[i+1]+=1;
                a[i]%=10;
            }
        if(a[l-1]>=10){
            a[l-1]%=10;
            a[l++]=1;
        }
        int flag=0;
        printf("Case %d:\n",count);
        printf("%s + %s = ",s1,s2);
        for(i=l-1;i>=0;i--){
            if(a[i])
                flag=1;
            if(flag)
                printf("%d",a[i]);
        }
        if(count!=nCase)
           printf("\n\n");
        else
            printf("\n");
    }
    return 0;
}

我的代码仔细看下吧,其实就是一个模拟数字相加,每一个位置相加,然后再依次进位

需要注意:判断最高维相加是不是需要进位

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式