HDOJ的一道编程题 大数加法

iBreatheBSB 2014-07-24 07:23:06
http://acm.hdu.edu.cn/showproblem.php?pid=1002
折腾了一天了。,。还是不能通过。。
求大神分析
哪里出问题了 ,虽然网上有代码 但是我还是想按照自己的思路做出来

#include<stdio.h>
#include<string.h>
void turn(char A[]);
void sum(char A[],char B[],int C[]);
int main()
{
int i,t,C[1000]={0};
char A[1000],B[1000];
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%s%s",A,B);
printf("Case %d:\n",i);
printf("%s + %s = ",A,B);
int s1=strlen(A);
int s2=strlen(B);
turn(A);
turn(B);
sum(A,B,C);
if(i!=t) printf("\n\n");

}
}
void turn(char A[]) //turn 函数将字符串字符顺序颠倒,并减去‘0’,以方便sum函数求和
{
int i,str=strlen(A);
char c;
for (i=0;i<str/2;i++)
c=A[i],A[i]=A[str-1-i],A[str-1-i]=c;
for(i=0;i<str;i++)
A[i]=A[i]-'0';

}
void sum(char A[],char B[],int C[]) //sum函数将AB两个数组的元素相加,并输出

{
int i,s,s1=strlen(A),s2=strlen(B);
for(i=0;i<s1&&i<s2;i++)
C[i]=A[i]+B[i];

if(s1>i) for(;i<s1;i++) C[i]=A[i];
else
for(;i<s2;i++) C[i]=B[i];

s=(s1>=s2?s1:s2);
for(i=0;i<s;i++)
if(C[i]>=10) C[i]-=10,C[i+1]+=1;

if (C[i]==1) printf("1");
for(i=s-1;i>=0;i--)
printf("%d",C[i]);


}



...全文
102 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iBreatheBSB 2014-07-24
  • 打赏
  • 举报
回复
引用 4 楼 IAccepted 的回复:

#include <cstdio>
#include <cstdlib>
#include <cstring>

const int MAX = 1002;

char sa[MAX],sb[MAX],res[MAX+1];

int Add(){
    int pos,la,lb,ts,c;

    la = strlen(sa)-1;
    lb = strlen(sb)-1;
    pos = MAX;
    res[pos] = '\0';
    c = 0;
    while(la>=0 && lb>=0){
        ts = (sa[la]-'0') + (sb[lb]-'0') +c;
        res[--pos]=ts%10+'0';
        --la,--lb;
        c = ts/10;
    }
    while(la>=0){
        ts = (sa[la]-'0')+c;
        res[--pos]=ts%10+'0';
        --la;
        c = ts/10;
    }
    while(lb>=0){
        ts = (sb[lb]-'0')+c;
        res[--pos]=ts%10+'0';
        --lb;
        c = ts/10;
    }
    if(c!=0)res[--pos]='0'+c;
    return pos;
}
int main(){
    int pos,n,i;
    scanf("%d",&n);
    for(i=1;i<=n;++i){
        scanf("%s %s",sa,sb);
        pos = Add();
        printf("Case %d:\n%s + %s = %s\n",i,sa,sb,res+pos);
        if(i!=n)printf("\n");
    }
    return 0;
}
这是我AC的代码,思路是一样的,你可以简单参考下
妙!整个字符串输出
iaccepted 2014-07-24
  • 打赏
  • 举报
回复

#include <cstdio>
#include <cstdlib>
#include <cstring>

const int MAX = 1002;

char sa[MAX],sb[MAX],res[MAX+1];

int Add(){
    int pos,la,lb,ts,c;

    la = strlen(sa)-1;
    lb = strlen(sb)-1;
    pos = MAX;
    res[pos] = '\0';
    c = 0;
    while(la>=0 && lb>=0){
        ts = (sa[la]-'0') + (sb[lb]-'0') +c;
        res[--pos]=ts%10+'0';
        --la,--lb;
        c = ts/10;
    }
    while(la>=0){
        ts = (sa[la]-'0')+c;
        res[--pos]=ts%10+'0';
        --la;
        c = ts/10;
    }
    while(lb>=0){
        ts = (sb[lb]-'0')+c;
        res[--pos]=ts%10+'0';
        --lb;
        c = ts/10;
    }
    if(c!=0)res[--pos]='0'+c;
    return pos;
}
int main(){
    int pos,n,i;
    scanf("%d",&n);
    for(i=1;i<=n;++i){
        scanf("%s %s",sa,sb);
        pos = Add();
        printf("Case %d:\n%s + %s = %s\n",i,sa,sb,res+pos);
        if(i!=n)printf("\n");
    }
    return 0;
}
这是我AC的代码,思路是一样的,你可以简单参考下
iBreatheBSB 2014-07-24
  • 打赏
  • 举报
回复
引用 2 楼 lovesmiles 的回复:
确实写得非常之烂    for(i=1;i<=t;i++)//t没有定义        {        scanf("%s%s",A,B);//这种输入可能会有问题,你没法区分a什么时候结束
第六行、、int t;定义了啊 scanf 输入的两个字符串是用空格隔开的 应该没问题
勤奋的小游侠 2014-07-24
  • 打赏
  • 举报
回复
确实写得非常之烂    for(i=1;i<=t;i++)//t没有定义        {        scanf("%s%s",A,B);//这种输入可能会有问题,你没法区分a什么时候结束
iBreatheBSB 2014-07-24
  • 打赏
  • 举报
回复
我知道我代码写的烂、、、

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧