c语言问题 计算高精度加法
由键盘输入两个位数很长的整数(一行一个数,每个数最长不超过80位),试计算并输出这两个数的和。输入:1234567890123456789987654321098765正...
由键盘输入两个位数很长的整数(一行一个数,每个数最长不超过80位),试计算并输出这两个数的和。
输入:
1234567890123456789
987654321098765
正确输出:
1235555544444555554 展开
输入:
1234567890123456789
987654321098765
正确输出:
1235555544444555554 展开
2个回答
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();
}
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询