c语言问题 计算高精度加法

由键盘输入两个位数很长的整数(一行一个数,每个数最长不超过80位),试计算并输出这两个数的和。输入:1234567890123456789987654321098765正... 由键盘输入两个位数很长的整数(一行一个数,每个数最长不超过80位),试计算并输出这两个数的和。
输入:
1234567890123456789
987654321098765
正确输出:
1235555544444555554
展开
 我来答
匿名用户
2013-12-03
展开全部
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MaxLen 256
void myadd( char* p, int n )
{
int t;
if( (*p) != '\0' ) t = (*p)-'0';
else t=0;
t = t + n;
if( t>=10 )
{
myadd( p+1, t/10 );
}
*p = t%10 + '0';
}

main()
{
char s[MaxLen] = {0};
char a[MaxLen] = {0};
char b[MaxLen] = {0};

printf( "输入第一个数字\n" );
scanf( "%s",a );
printf( "输入第二个数字\n" );
scanf( "%s",b );

int lena = strlen(a);
int lenb = strlen(b);

int len = (lena>=lenb?lenb:lena);
int i;
for( i=0;i<len;i++ )
{
int t = (a[lena-1-i]-'0') + (b[lenb-1-i]-'0');
myadd( &s[i], t );
}
if( lena>lenb )
{
for( ;i<lena;i++ )
{
int t = (a[lena-1-i]-'0');
myadd( &s[i], t );
}
}
else if( lenb>lena )
{
for( ;i<lenb;i++ )
{
int t = (b[lenb-1-i]-'0');
myadd( &s[i], t );
}
}
len = strlen(s);
for( int i1=0;i1<len/2;i1++ )
{
char ch = s[i1];
s[i1] = s[len-1-i1];
s[len-1-i1] = ch;
}

printf( "\n" );
printf( "%s\n",s );
getch();

}
匿名用户
2013-12-03
展开全部
#include <stdio.h>
#include <string.h>

void main()
{
char n1[100],n2[100],n3[100],t;
int i1,i2,i3,nn1,nn2,n,m=0;

printf("输入第1个数:");
scanf("%s",n1);
printf("输入第2个数:");
scanf("%s",n2);
i1=strlen(n1)-1;
i2=strlen(n2)-1;
for(i3=0;i1>=0 || i2>=0;i1--,i2--,i3++)
{
nn1=i1>=0?n1[i1]-'0':0;
nn2=i2>=0?n2[i2]-'0':0;
n=nn1+nn2+m;
if(n>9)
{
n-=10;
m=1;
}
else
m=0;
n3[i3]=n+'0';
}
if(m)
n3[i3++]=m+'0';
n3[i3--]='\0';
for(i1=0,i2=i3;i1<i2;i1++,i2--)
{
t=n3[i1];
n3[i1]=n3[i2];
n3[i2]=t;
}
printf("%s",n3);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式