中易网

C语言 超长整数加法

答案:3  悬赏:0  
解决时间 2021-04-22 22:59
超长整数加法

【问题描述】

编写程序用递归的方式实现两个超长整数的加法运算。

【输入形式】

从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083),同时还要考虑负整数前导的“-”号。 1. 第一行是超长整数A; 2. 第二行是超长整数B。

【输出形式】

输出只有一行,是长整数A加上长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。

【输入样例】

234098
-134098703578230056

【输出样例】

-134098703577995958
最佳答案
以前我也做过一个大整数程序,2000!,不过那里面没有减法。做这个减法真让花时间啊。
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 4000
dd(char *a)
{
char t[MAX];
int i,j;
for(i=0;i<MAX;i++)
{
if(a[i]==NULL)
{
for(j=0;i>0;j++,i--)
{
t[j]=a[i-1];
}
strncpy(a,t,j);
break;
}
}
}
add1(char *a,char *b,int n,char *c)
{
int N;
if(*a!=NULL&&*b!=NULL)
N=*a-'0'+*b-'0'+n;
else if(*a==NULL&&*b!=NULL)
N=*b-'0'+n;
else if(*a!=NULL&&*b==NULL)
N=*a-'0'+n;
else
N=n;
*c=(N%10)+'0';
N=N/10;
if(*(a+1)!=NULL||*(b+1)!=NULL||N!=0)
{
add1(a+1,b+1,N,c+1);
}
}
addab(char *a,char *b,char *c)
{
dd(a);
dd(b);
dd(c);
add1(a,b,0,c);
dd(a);
dd(b);
dd(c);
}
d_(char *a)
{
int i;
for(i=0;a[i]!=NULL;i++)
{
a[i]=a[i+1];
}
}
udg1(char *a,char *b,int n,char *c)
{
int N;
if(*b==NULL)
{
N=*a-'0'-n;
n=0;
}
else
{
if(*a>=(*b+n))
{
N=*a-*b-n;
n=0;
}
else
{
N=*a+10-*b-n;
n=1;
}
}
*c=N+'0';
if(*(a+1)!=NULL)
udg1(a+1,b+1,n,c+1);
}
udg(char *a,char *b,char *c)
{
int i;
if((strcmp(a,b)>0&&strlen(a)==strlen(b))||strlen(a)>strlen(b))
i=1;
else if((strcmp(a,b)<0&&strlen(a)==strlen(b))||strlen(b)>strlen(a))
i=-1;
else
i=0;
dd(a);
dd(b);
dd(c);
if(i==1)
udg1(a,b,0,c);
else if(i==-1)
{
udg1(b,a,0,c);
for(i=0;i<MAX;i++)
{
if(c[i]==NULL)
{
c[i]='-';
break;
}
}
}
else
*c='0';
dd(a);
dd(b);
dd(c);
}
add_(char *c)
{
int i;
char t1,t2;
t1=c[0];
t2=c[1];
c[0]='-';
for(i=1;t1!='\0';i++)
{
c[i]=t1;
t1=t2;
t2=c[i+1];
}
}
main()
{
char a[MAX]={NULL},b[MAX]={NULL},c[MAX]={NULL};
printf("输入两个数:\n");
scanf("%s",a);
getchar();
scanf("%s",b);
getchar();
if(a[0]!='-'&&b[0]!='-')
{
addab(a,b,c);
}
else
{
if(a[0]=='-'&&b[0]!='-')
{
d_(a);
udg(b,a,c);
}
else if(a[0]!='-'&&b[0]=='-')
{
d_(b);
udg(a,b,c);
}
else
{
d_(b);
d_(a);
addab(a,b,c);
add_(c);
}
}
printf("%s\n",c);
getchar();
}
全部回答
#include #include #define n 250 int maxlen(int x,int y) { if(x>y) { return x; } else { return y; } } int main() { int i,j,k,l1,l2,a[n],b[n],max,s,sum; char s1[n],s2[n]; for(i=0;i=0;i--,j--) { a[i]=s1[j]-'0'; } for(i=k,j=l2-1;j>=0;i--,j--) { b[i]=s2[j]-'0'; } for(i=k;i>0;i--) { a[i]+=b[i]; if(a[i]>=10) { a[i]-=10; a[i-1]++; } } if(a[0]!=0) {for(i=0;i<=k;i++) { printf("%d",a[i]); } } else { for(i=1;i<=k;i++) { printf("%d",a[i]); } } return 0; } //没有测试组数 自己看着加上就行了
你看看大数运算就都会了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怀孕期间可以喝核桃粉吗
梦幻西游 解压缩以后有多大?
我记得有一部外国的片子 是一个男人和一个女
退休之后怎样调整自己的心态?
妍美化妆品店怎么去啊,有知道地址的么
40英尺骨架集装箱车价格多少钱
兰州哪家旅行社提供包车去九寨
4399开心农场打不开
婴儿羊奶粉选择什么牌子的好呢?想给宝宝换一
雀斑是怎么形成的?
株州到张家界坐汽车要多少钱
计算机考研南航的829南理工的877和408谁难
电锤如何加油
山西太原有几个沃尔玛超市分别在什么地方?
陈家桥农贸市场地址在什么地方,想过去办事
推荐资讯
电脑变的卡 而且主机箱里“咔咔”的声音
关于创新7.1声卡。求高手教怎么设置效果。
如何让空调制冷快还省电
唇语是怎么读的
为什么我的QQ不显示了,只听到聊天的提示声而
DNF格兰之森也能杀深渊么?翻拍可以反到粉装
怎样写幼儿园保教计划
男人左胸下面疼是怎么回事
我是河北藳城区常安镇后营村要申请快递代理
丰胸的人可以做火疗,汗蒸吗
我的手机是OPPO的find5,刚刚升级了手机系统
台风是怎样命名的?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?