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

2024-11-20 08:45:24
推荐回答(5个)
回答(1):

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

需要注意以下几点:

1 大数如何存储及输出;

2 计算时进位的处理;

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

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


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


#include 
#include 

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        sum[i+1]+=sum[i]/10;
        sum[i]=sum[i]%10;
    }
    for (i=j; i>=0; --i) {
        printf("%d", sum[i]);
    }
}

 

回答(2):

首先你要定义这两个整数的类型;
因为是整数所以必然使用int
大小任意...
long long int a,b,c;
a = ;
b= ;
c = a + b;

回答(3):

#include
#include
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 {
sum[i]=a[i]+b[i];
}
for(i=0;i {
if(sum[i]>=10&&i {
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;
}

回答(4):

先用random()生成随机数,这个数是任意大小的
然后做加法操作即可

回答(5):

http://zhidao.baidu.com/question/2261388.html
这是我以前给某个仁兄写的程序,无来还没有实现最后一个除法
其中实现了加法,减法(包括小数),乘法(不包括小数)

你可以参考看看,程序可以直接在C++环境运行(需要修改一些头文件)