如何C语言中实现两个任意大小的整数的相加

这个问题我已经做了7天了。现在还没有很彻底的完成这个问题。问题在于任意个数,我用单链表实现了操作,但是占用的空间很大,昨天用双向链表实现了。加法函数写了131行代码(任何... 这个问题我已经做了7天了。现在还没有很彻底的完成这个问题。
问题在于任意个数,我用单链表实现了操作,但是占用的空间很大,
昨天用双向链表实现了。加法函数写了131行代码(任何语句都是一行,循环体不管多长,都用括号,括号占一行。)
然后觉得太长了,于是改进了方法,加法函数精简到81行,但是问题出现了。是否还可以精简呢??
希望有高手可以帮我解答这个问题。
这两个数是用户自己输入的。而且不考虑是不是内存够不够的情况。比如我输入2个1000亿的数进行相加,2个数由用户或者其他程序提供。
展开
 我来答
风若远去何人留
推荐于2017-09-30 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450096
专业C/C++软件开发

向TA提问 私信TA
展开全部

要实现任意大小两个整数相加,那么就不能存在溢出情况。所以无法使用任何系统类型,唯一的方式是用数组模拟整数存储,并自行实现加法操作算法。

需要注意以下几点:

1 大数如何存储及输出;

2 计算时进位的处理;

3 两个计算数长度不同时的处理;

4 当达到最高位仍有进位的处理,即结果的长度大于任意一个操作数。


以下是一个比较简单的代码:


#include <stdio.h>
#include <stdlib.h>

char s[101];
int sum[101];

int main() 
{
    int i, j;
    while (gets(s), strcmp(s, "0")) {//巧妙化解开多少个数组 算多少个数的和的局面
        j=strlen(s);
        for (i=j-1; i>=0; --i) {
            sum[j-i-1]+=(s[i]-'0');//s[i]-'0'表示字符数字转化成int数字  倒序加到sum中 sum第一个数是s的最后一个数的和
        }
    }
    j=101; while(!sum[j])--j;  //重新赋值j 使j为目前sum的总位数
    for (i=0;i<j;++i) {   //如果s[i]加成两位数 将十位数加给前一位数
        sum[i+1]+=sum[i]/10;
        sum[i]=sum[i]%10;
    }
    for (i=j; i>=0; --i) {
        printf("%d", sum[i]);
    }
}

 

wfxxs2011
2015-09-10 · TA获得超过257个赞
知道答主
回答量:143
采纳率:50%
帮助的人:42万
展开全部
首先你要定义这两个整数的类型;
因为是整数所以必然使用int
大小任意...
long long int a,b,c;
a = ;
b= ;
c = a + b;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-12-27
展开全部
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[201],arr2[201];
printf("请输入加数:");
scanf("%s",&arr1);
printf("请输入加数:");
scanf("%s",&arr2);
int len1=strlen(arr1);
int len2=strlen(arr2);
int i,f=0;
int a[201]={0};int b[201]={0};int sum[202]={0};
int j=0;
for(i=len1-1;i>=0;i--)
{
a[j++]=arr1[i]-'0';
}
j=0;
for(i=len2-1;i>=0;i--)
{
b[j++]=arr2[i]-'0';
}
int max=(len1>len2)?len1:len2;
for(i=0;i<max;i++)
{
sum[i]=a[i]+b[i];
}
for(i=0;i<max;i++)
{
if(sum[i]>=10&&i<max-1)
{
sum[i+1]++;
sum[i]-=10;
}
if(sum[i]>=10&&i==max-1)
{
f=1;
sum[i+1]++;
sum[i]-=10;
}
}
printf("计算结果为:");
if(f==1) printf("%d",f);
for(i=max-1;i>=0;i--)
{
printf("%d",sum[i]);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
树大没风
2015-11-02 · TA获得超过316个赞
知道小有建树答主
回答量:200
采纳率:100%
帮助的人:103万
展开全部
先用random()生成随机数,这个数是任意大小的
然后做加法操作即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友30dba36
2006-04-07 · TA获得超过430个赞
知道小有建树答主
回答量:609
采纳率:0%
帮助的人:358万
展开全部
http://zhidao.baidu.com/question/2261388.html
这是我以前给某个仁兄写的程序,无来还没有实现最后一个除法
其中实现了加法,减法(包括小数),乘法(不包括小数)

你可以参考看看,程序可以直接在C++环境运行(需要修改一些头文件)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式