如何C语言中实现两个任意大小的整数的相加
这个问题我已经做了7天了。现在还没有很彻底的完成这个问题。问题在于任意个数,我用单链表实现了操作,但是占用的空间很大,昨天用双向链表实现了。加法函数写了131行代码(任何...
这个问题我已经做了7天了。现在还没有很彻底的完成这个问题。
问题在于任意个数,我用单链表实现了操作,但是占用的空间很大,
昨天用双向链表实现了。加法函数写了131行代码(任何语句都是一行,循环体不管多长,都用括号,括号占一行。)
然后觉得太长了,于是改进了方法,加法函数精简到81行,但是问题出现了。是否还可以精简呢??
希望有高手可以帮我解答这个问题。
这两个数是用户自己输入的。而且不考虑是不是内存够不够的情况。比如我输入2个1000亿的数进行相加,2个数由用户或者其他程序提供。 展开
问题在于任意个数,我用单链表实现了操作,但是占用的空间很大,
昨天用双向链表实现了。加法函数写了131行代码(任何语句都是一行,循环体不管多长,都用括号,括号占一行。)
然后觉得太长了,于是改进了方法,加法函数精简到81行,但是问题出现了。是否还可以精简呢??
希望有高手可以帮我解答这个问题。
这两个数是用户自己输入的。而且不考虑是不是内存够不够的情况。比如我输入2个1000亿的数进行相加,2个数由用户或者其他程序提供。 展开
6个回答
展开全部
要实现任意大小两个整数相加,那么就不能存在溢出情况。所以无法使用任何系统类型,唯一的方式是用数组模拟整数存储,并自行实现加法操作算法。
需要注意以下几点:
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]);
}
}
展开全部
首先你要定义这两个整数的类型;
因为是整数所以必然使用int
大小任意...
long long int a,b,c;
a = ;
b= ;
c = a + b;
因为是整数所以必然使用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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先用random()生成随机数,这个数是任意大小的
然后做加法操作即可
然后做加法操作即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://zhidao.baidu.com/question/2261388.html
这是我以前给某个仁兄写的程序,无来还没有实现最后一个除法
其中实现了加法,减法(包括小数),乘法(不包括小数)
你可以参考看看,程序可以直接在C++环境运行(需要修改一些头文件)
这是我以前给某个仁兄写的程序,无来还没有实现最后一个除法
其中实现了加法,减法(包括小数),乘法(不包括小数)
你可以参考看看,程序可以直接在C++环境运行(需要修改一些头文件)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询