c语言程序设计——计算数值较大的a+b 30

DescriptionCalculatea+bInputTwointegera,b(0<=a,b<=1000000000000000000000000000000)Out... Description
Calculate a+b
Input
Two integer a,b (0<=a,b<=1000000000000000000000000000000)
Output
Output a+b
Sample Input
1 2
Sample Output
3
展开
 我来答
l521088816
2013-01-15 · TA获得超过1772个赞
知道小有建树答主
回答量:780
采纳率:0%
帮助的人:1063万
展开全部

#include<stdio.h>

#include<string.h>

void main()

 int b[500]={0},a[500]={0};

 char c[500],d[500];

 printf("Input a\n");

 gets(d);

 for(int i=0;i<strlen(d);i++)

  if(d[i]<48||d[i]>58)

  {

   printf("Wrong Input\n");

   return;

  }

  else 

  {

   a[499-i]=d[strlen(d)-i-1]-48;

  }

 printf("Input b\n");

 gets(c);

 for(i=0;i<strlen(c);i++)

  if(c[i]<48||c[i]>58)

  {

   printf("Wrong Input\n");

   return;

  }

  else 

  {

   b[499-i]=c[strlen(c)-i-1]-48;

  }

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

  a[i]=a[i]+b[i];

 for(i=499;i>0;i--)

 {

  if(a[i]>9)

  {

   a[i-1]+=a[i]/10;

   a[i]%=10;

  }

 }

 printf("a + b = ");

 for(i=0;a[i]==0;i++);

 for(;i<500;i++)

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

 printf("\n");

}

cpucash
2013-01-15 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:971万
展开全部
给你中心算法
输入ab
char a[2000]={0},b[2000]={0},c[2000]={0};
这里ab需要先全部赋值为零,要不然长度不一样的话,会有随机数干扰计算

gets(a);
gets(b);
球长度
la=strlen(a);
lb=strlen(b);
lc=la>lb?la:lb;
反序,这样个位才能对应上,个位对个位,百位对百位
strrev(a);
strrev(b);
先计算个位 需要变成int型
c[0]=a[0]+b[0]-96;
再计算中间个位
for(i=1;i<lc;i++)
{
c[i]=a[i]+b[i]-96+c[i-1]/10; 需要加上上一位的进位
c[i-1]%=10; 取出每位的个位
c[i-1]+=48; //变成char型
}
最后处理最高位
while(c[lc-1]>9)
{
c[lc-1]+=38;
c[lc]=49; 变成char的1 两个数相加最大为9+9+1,1是进位
lc++;
}
最后反序回来,也可以从后面打印
strrev(c);
puts(c)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_whales
2013-01-15 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:508万
展开全部
#define MAXLENTH 200
#define MAXVALUE 10000
typedef struct
{
int v[MAXLENTH];
} VeryLongInt;
VeryLongInt *Add2(VeryLongInt *a,const VeryLongInt *b)
{
int i;
int carry=0;

if(a==b )
{
for(i=0;i<MAXLENTH;i++)
{
a->v [i]<<=1;
a->v[i]+=carry;
if(a->v [i]>=MAXVALUE)
{ a->v [i]-=MAXVALUE;
carry=1;
}
else carry=0;
}
return a;
}

for(i=0;i<MAXLENTH;i++)
{
a->v [i]+=b->v [i];
a->v [i]+=carry;
if(a->v [i]>=MAXVALUE)
{ a->v [i]-=MAXVALUE;
carry=1;
}
else carry=0;
}
return a;
}
VeryLongInt *Add(VeryLongInt *c,const VeryLongInt *a,const VeryLongInt *b)
{

int i;
int carry=0;
if(c==a )
{
return Add2(c,b);
}
else if(c==b)
{
return Add2(c,a);
}
for(i=0;i< MAXLENTH;i++)c->v[i]=0;
for(i=0;i<MAXLENTH;i++)
{
c->v[i] =a->v[i]+b->v[i];
c->v[i]+=carry;
if(c->v[i]>=MAXVALUE)
{
c->v[i]-=MAXVALUE;
carry =1;
}
else
{
carry=0;
}
}
return c;
}

int printVeryLongInt(const VeryLongInt *a)
{
int i;
for(i=MAXLENTH-1;i>0 ;i--){
if(a->v[i])break;
}

if(i==0){
printf("%4d",a->v[i]);
return i;
}
printf("%4d",a->v[i--]);
for(;i>=0;i--)
{
printf("%04d",a->v[i]);
}
printf("\n",a->v[i--]);
return i;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友19e49fd
2013-01-15 · 超过10用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:36.3万
展开全部
#define long long INT64
INT64 add(INT64 a,INT64 b)
{
return a+b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式