| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1095 人关注过本帖
标题:杭电1002,我测试的数据都对,但是提交时错误的,实在找不到哪儿有问题,大 ...
只看楼主 加入收藏
赤云
Rank: 2
等 级:论坛游民
帖 子:82
专家分:35
注 册:2014-12-29
结帖率:64.71%
收藏
已结贴  问题点数:16 回复次数:17 
杭电1002,我测试的数据都对,但是提交时错误的,实在找不到哪儿有问题,大神给看看,拜谢
http://acm.hdu.
提交后,反馈结果是错误,请大神给看看,代码哪儿有错误
我的代码:
程序代码:
#include <stdio.h>
#include <string.h>
#include <memory.h>
void daozhuan(char s[],int len){//将字符串对调,例如123对调为321
    int j,t;
    for(j=0;j<len/2;j++){
        t=s[j];
        s[j]=s[len-j-1];
        s[len-j-1]=t;
    }
}
void sum(char s[],char a[],char b[]){//求a+b的和 s
    int i,j,lena,lenb,n,t;
    lena=strlen(a);
    lenb=strlen(b);
    n=(lena>lenb) ? lenb : lena;//n取两字符串中长度最小的值
    daozhuan(a,lena);//对调a与b,从个位逐个相加
    daozhuan(b,lenb);
    for(i=0;i<n;i++){
        s[i]=a[i]+b[i]-48;//从个位开始相加后存入s中(s中的元素允许有大于字符9的字符,此时不存在进位)
    }
    while(i<lena){//如果a的长度比b大,则将a中多余的位照搬进s中
        s[i]=a[i++]+s[i]-48;
    }
    while(i<lenb){//如果b的长度比a大,则将b中多余的位照搬进s中
        s[i]=b[i++]+s[i]-48;
    }
    j=0;
    while(j<i){//处理s中大于字符9的元素
        if(s[j]>'9'){
            t=s[j]-48;
            s[j]-=10*(t/10);
            s[j+1]+=t/10;
        }
        j++;
    }
    s[i+1]='\0';
    daozhuan(s,i+1);
}
void print(char s[],int len){
    int flag=1,i;
    for(i=0;i<len;i++){//从第一个不为0的元素开始,输出s的值;如果全部为0,结果输出0
        if(s[i]=='0' && flag && i!=len-1)
            continue;
        else{
            flag=0;
            printf("%c",s[i]);
        }
    }
    printf("\n");
}
int main(){
    char a[1002],b[1002],s[1002],ta[1002],tb[1002];
    int T,cnt=1;
    scanf("%d",&T);
    while(T--){
        scanf("%s%s",a,b);
        strcpy(ta,a);
        strcpy(tb,b);
        memset(s,'0',sizeof(s));
        sum(s,a,b);
        printf("Case %d:\n",cnt++);
        printf(ta);printf(" + ");printf(tb);
        printf(" = ");
        print(s,strlen(s));
        printf("\n");
    }
    return 0;
}

搜索更多相关主题的帖子: 字符串 
2015-08-27 10:23
kenierlee
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:58
专家分:474
注 册:2015-7-28
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *add(const char *a, const char *b, char *result)
{
    char *p1 = strchr(a, 0)-1;
    char *p2 = strchr(b, 0)-1;
    char *p3 = result + 1000;
    result[1001] = '\0';
    int left, right, c, carry = 0;
    while (p1 >= a || p2 >= b)
    {
        left  = (p1 >= a) ? *p1 : '0';
        right = (p2 >= b) ? *p2 : '0';
        c = (left-'0') + (right-'0') + carry;
        carry = c/10;
        *p3-- = c % 10 + '0';
        *p3   = carry + '0';
        --p1; --p2;
    }
    return *p3 == '0' ? p3 + 1 : p3;
}

int main(void)
{
    int n, i;
    char a[1001], b[1001], result[1002];
    scanf("%d", &n);
    scanf("%s%s", a, b);
    printf("Case %d:\n%s + %s = %s\n", 1, a, b, add(a, b, result));
    for (i = 1; i < n; ++i)
    {
        scanf("%s%s", a, b);
        printf("\nCase %d:\n%s + %s = %s\n", i+1, a, b, add(a, b, result));
    }
    return 0;
}

这段代码已经AC了,楼主可以参考一下。
2015-08-27 13:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
楼主的代码实在复杂,我仅检查一下输入条件和输出格式,输入条件没问题
输出格式嘛,
Output a blank line between two test cases.
也就是样例输出为
Case 1:
1 + 2 = 3
空行
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

但楼主的输出是
Case 1:
1 + 2 = 3
空行
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
空行
2015-08-27 13:56
赤云
Rank: 2
等 级:论坛游民
帖 子:82
专家分:35
注 册:2014-12-29
收藏
得分:0 
回复 3楼 rjsp
谢谢,能不能找到错误的测试用例?
2015-08-27 14:04
赤云
Rank: 2
等 级:论坛游民
帖 子:82
专家分:35
注 册:2014-12-29
收藏
得分:0 
回复 2楼 kenierlee
我的代码有没有错误的测试用例?
2015-08-27 14:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
1 2
0 1
Case 1:
2 + 0 = 2

DO IT YOURSELF !
2015-08-27 14:08
赤云
Rank: 2
等 级:论坛游民
帖 子:82
专家分:35
注 册:2014-12-29
收藏
得分:0 
回复 6楼 wp231957
这哪儿错了?

[ 本帖最后由 赤云 于 2015-8-27 14:39 编辑 ]
2015-08-27 14:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:1 
以下是引用赤云在2015-8-27 14:04:00的发言:

谢谢,能不能找到错误的测试用例?
我那个大红的字你看不到?
2015-08-27 16:24
赤云
Rank: 2
等 级:论坛游民
帖 子:82
专家分:35
注 册:2014-12-29
收藏
得分:0 
回复 8楼 rjsp
2楼的代码的结果和你的输出格式不一样,就能ac。我的代码应该是有错误的测试用例。
2015-08-27 16:47
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
回复 8楼 rjsp
同意rjsp版主观点,楼主的代码稍作修改即Accepted了,修改后的代码如下:
程序代码:
#include <stdio.h>
#include <string.h>
#include <memory.h>
void daozhuan(char s[],int len){//将字符串对调,例如123对调为321
    int j,t;
    for(j=0;j<len/2;j++){
        t=s[j];
        s[j]=s[len-j-1];
        s[len-j-1]=t;
    }
}
void sum(char s[],char a[],char b[]){//求a+b的和 s
    int i,j,lena,lenb,n,t;
    lena=strlen(a);
    lenb=strlen(b);
    n=(lena>lenb) ? lenb : lena;//n取两字符串中长度最小的值
    daozhuan(a,lena);//对调a与b,从个位逐个相加
    daozhuan(b,lenb);
    for(i=0;i<n;i++){
        s[i]=a[i]+b[i]-48;//从个位开始相加后存入s中(s中的元素允许有大于字符9的字符,此时不存在进位)
    }
    while(i<lena){//如果a的长度比b大,则将a中多余的位照搬进s中
        s[i]=a[i++]+s[i]-48;
    }
    while(i<lenb){//如果b的长度比a大,则将b中多余的位照搬进s中
        s[i]=b[i++]+s[i]-48;
    }
    j=0;
    while(j<i){//处理s中大于字符9的元素
        if(s[j]>'9'){
            t=s[j]-48;
            s[j]-=10*(t/10);
            s[j+1]+=t/10;
        }
        j++;
    }
    s[i+1]='\0';
    daozhuan(s,i+1);
}
void print(char s[],int len){
    int flag=1,i;
    for(i=0;i<len;i++){//从第一个不为0的元素开始,输出s的值;如果全部为0,结果输出0
        if(s[i]=='0' && flag && i!=len-1)
            continue;
        else{
            flag=0;
            printf("%c",s[i]);
        }
    }
    printf("\n");
}
int main(){
    char a[1002],b[1002],s[1002],ta[1002],tb[1002];
    int T,cnt=1;
    scanf("%d",&T);
    while(T--){
        if(cnt>1)printf("\n");  //在这里判断不是第一次就加空行
        scanf("%s%s",a,b);
        strcpy(ta,a);
        strcpy(tb,b);
        memset(s,'0',sizeof(s));
        sum(s,a,b);
        printf("Case %d:\n",cnt++);
        printf(ta);printf(" + ");printf(tb);
        printf(" = ");
        print(s,strlen(s));
    }
    return 0;
}

能编个毛线衣吗?
2015-08-27 16:49
快速回复:杭电1002,我测试的数据都对,但是提交时错误的,实在找不到哪儿有问题 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027071 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved