一道A+B的C语言程序。(ACM)

http://acm.hdu.edu.cn/showproblem.php?pid=1002上面是题目,下面是我写的代码,思路大体应该是对的,但是不能运行,请高手帮助。#... http://acm.hdu.edu.cn/showproblem.php?pid=1002
上面是题目,
下面是我写的代码,思路大体应该是对的,但是不能运行,请高手帮助。
#include <stdio.h>
#include <string.h>
#define N 1000
int main ()
{
char ADD(char x[N],char y[N]);
char a[N],b[N],c[N];
int T,i;
scanf("%d",&T);
{
for(i=0;i<T;i++)
{
memset(a,'0',sizeof(a));
memset(b,'0',sizeof(b));
memset(c,'0',sizeof(c));
scanf("%s%s",&a,&b);
printf("Case %d:\n",i+1);
c[N]=ADD(a[N],b[N]);
printf("%s + %s = %s\n",a,b,c);
}
}
return 0;
}
char ADD(char x[N],char y[N])
{
int l1=0;
int l2=0;
int l3=0;
char z[N];
int j;
l1=strlen(x[N]);
l2=strlen(y[N]);
if(l1>l2)
l3=l1;
else l3=l2;
for(j=0;j<l1;j++)
{
x[j]=x[l1-j-1]-'0';
}
for(j=0;j<l2;j++)
{
y[j]=y[l2-j-1]-'0';
}
for(j=0;j<l3;j++)
{
z[j]=x[j]+y[j];
if(z[j]>=10)
{
z[j]=z[j]-10;
z[j+1]=z[j+1]+1;
}
z[j]=z[l3-j-1];
}
return z;
}
展开
 我来答
用QQ名居然违规
2011-02-27 · TA获得超过1110个赞
知道小有建树答主
回答量:1057
采纳率:50%
帮助的人:423万
展开全部

#include <stdio.h>

#include <string.h>

#define N 1000

int main ()

{

void myadd1(char *x,char *y,char *z);

char a[N]="elpmaS",b[N],c[N+1];

int T,i,j,k;

  strcpy(b,a);

  printf("strrev(\"%s\")=\"%s\"\n",b,strrev(a));

 scanf("%d",&T);

 for(i=0;i<T;i++)

  {memset(c,'0',1);

   scanf("%s%s",a,b);

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

   myadd1(a,b,c);

   if(strlen(a)>strlen(b))j=strlen(a);else j=strlen(b);

   printf(" %*s\n+%*s\n",j,a,j,b);

   for(k=0;k<=75;k++)printf("-");printf("\n");

   printf("%*s\n",j+1,c);                     /*连续三行printf()用于格式化输出 只是为了好看 可删*/

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

 }

 scanf("%d"); /*暂停 看输出用*/

}

void myadd1(char *x,char *y,char *z)

{

  int l1,l2,l3,j,jw=0; /*jw 进位标记*/

  char *temp;

 l1=strlen(x); l2=strlen(y);   /*串反转*/

 if(l1>l2)  {temp=x;x=y;y=temp;l3=l1;l1=l2;l2=l3;} /*串x放短,串y放长*/

 strrev(x); strrev(y);

 for(j=0;j<l1;j++) /*短串相加*/

  {z[j]=x[j]+y[j]-'0'-'0'+jw;

   if(z[j]>=10){z[j]=z[j]-10;jw=1;}

     else jw=0;

   z[j]=z[j]+'0';

  }

 for(j=l1;j<l2;j++) /*余部*/

  {z[j]=y[j]-'0'+jw;

   if(z[j]>=10){z[j]=z[j]-10;jw=1;}

     else jw=0;

   z[j]=z[j]+'0';

  }

 if(jw==1){z[l2]='1';z[l2+1]='\0';}

 else z[l2]='\0';   /*如果最后还有进位,直接补1*/

  strrev(x); strrev(y);    strrev(z);  /*串反转*/

}

zack163
2011-02-27 · 超过24用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:47.6万
展开全部
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
typedef int llong[1000];
using namespace std;

void input(llong &a)
{
string s;
int len;
memset(a,0,sizeof(a));
cin>>s;
len=s.size();
for(int i=len;i>=1;i--)
a[i]=s[len-i]-'0';
a[0]=len;
}

void output(llong a)
{
for(int i=a[0];i>=1;i--)
printf("%d",a[i]);
}

void add_llong(llong a,llong b,llong &c)
{
llong tmp;
memset(tmp,0,sizeof(tmp));
int len=a[0]>b[0]?a[0]:b[0];
for(int i=1;i<=len;i++)
tmp[i]=a[i]+b[i];
len++;
for(int i=1;i<=len;i++)
if(tmp[i]>9) tmp[i+1]++,tmp[i]-=10;
while(tmp[len]==0&&len>1) len--;
tmp[0]=len;
memcpy(c,tmp,sizeof(c));
}

int main()
{
int t,i=1;
llong a,b,c;
scanf("%d",&t);
while(t--)
{
input(a);
input(b);
printf("Case %d:\n",i++);
output(a);
printf(" + ");
output(b);
printf(" = ");
add_llong(a,b,c);
output(c);
putchar('\n');
if(t) putchar('\n');
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kgimgx
2011-02-27 · TA获得超过121个赞
知道答主
回答量:354
采纳率:0%
帮助的人:0
展开全部
i]=a[i]+b[i]+c[i];
先让c字符串都是0,
c[i+1]+=(a[i]+b[i])%10;
算法就是这样,很简答,

看不懂,我可以发你代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x88se
2011-02-27 · TA获得超过107个赞
知道答主
回答量:113
采纳率:100%
帮助的人:56.7万
展开全部

#include <stdio.h>

#include <string.h>

#define N 1000

void add(char z[],char x[],char y[])

{

 int l1,l2,l3;

 l1 = strlen(x);

 l2 = strlen(y);

 if(l1>l2) l3 = l1;

 else l3 = l2;

 strrev(x);//反转字符串

 strrev(y);

 for(int j=0;j<l3;j++)

 {

  z[j]=z[j]%48+x[j]%48+y[j]%48+'0';

  if(z[j]>'9')

  {

   z[j] = z[j]-10;

   z[j+1] = z[j+1]+49;

  }

 }

 strrev(z);

 strrev(x);

 strrev(y);

}

int main ()

{

 char a[N],b[N],c[N];

 int T;

 FILE *fp;

 fp = fopen("in.txt","r");//输入文件,保存在同文件夹下

 if(!fp)

 {

  printf("cannot open file in.txt");

  return 0;

 }

 fscanf(fp,"%d",&T);

 for(int i=0;i<T;i++)

 {

  memset(a,0,sizeof(a));

  memset(b,0,sizeof(b));

  memset(c,0,sizeof(c));

  fscanf(fp,"%s\t%s",a,b);

  add(c,a,b);

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

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

 }

 fclose(fp);

 return 0;

}

修改了一下,见拙了。

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式