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

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

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

需要注意以下几点:

1 大数如何存储及输出;

2 计算时进位的处理;

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

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

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

#include <stdioh>

#include <stdlibh>

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]);

    }

}

这个程序也许能满足你的要求:

import javaioBufferedReader;

import javaioIOException;

import javaioInputStreamReader;

public class BigInteger//定义长整型的类

{

private static final int add1Max=1000;//可计算最长位数

private static final int add2Max=1000;//同上

private char[] add1 = new char[add1Max];

private char[] add2 = new char[add1Max];

private int len1;

private int len2;

public void setAdd1() throws IOException

{

int i=0;

String sLine1;

Systemoutprint("请输入第一个长整数: ");//输入第一个长整数

BufferedReader in = new BufferedReader(new InputStreamReader(Systemin));

sLine1=inreadLine();

for(;i<sLine1length();i++)

add1[i]=sLine1charAt(i);

for(i=0;i<add1Max;i++)//len1=add1length()

{

if(add1[i]!='\0')

len1++;

}

}

public void setAdd2() throws IOException

{

int i=0;

String sLine2;

Systemoutprint("请输入第二个长整数 : ");//输入第二个长整数

BufferedReader in2 = new BufferedReader(new InputStreamReader(Systemin));

sLine2 = in2readLine();

for(i=0;i<sLine2length();i++)

add2[i]=sLine2charAt(i);

for(i=0;i<add2Max;i++)//len2=add2length()

{

if(add2[i]!='\0')

len2++;

}

}

public char[] getAdd1()

{

return add1;

}

public char[] getAdd2()

{

return add2;

}

public int getLen1()

{

return len1;

}

public int getLen2()

{

return len2;

}

public void add(char[] add1,char[] add2)//BigInteger相加方法

{

int len = Mathmax(len1,len2);

int i;

char[] temp1 = new char[len];

char[] temp2 = new char[len];

char[] result = new char[len+1];

for(i=0;i<len1;i++)

temp1[len-1-i]=add1[len1-1-i];

for(i=0;i<len2;i++)

temp2[len-1-i]=add2[len2-1-i];

int m=0;

for(i=0;i<len;i++)//相加

{

if(temp1[len-1-i]!=0)

temp1[len-1-i]-=48;

if(temp2[len-1-i]!=0)

temp2[len-1-i]-=48;

m=temp1[len-1-i]+temp2[len-1-i];

if(m>=10)

{

m-=10;

result[len-i]+=m;

result[len-1-i]+=1;

}

else result[len-i]+=m;

}

Systemoutprint("相加的和为:");//输出相加结果

i=0;

if(result[0]==0)

i=1;

for(;i<len+1;i++)

Systemoutprint(IntegertoString(result[i]));

}

public static void main(String[] args) throws IOException//主方法

{

BigInteger big = new BigInteger();//生成一个BigInteger对象

bigsetAdd1();//得到数1

bigsetAdd2();//得到数2

char[] num1 = biggetAdd1();//相加

char[] num2 = biggetAdd2();//相减

int len1 = biggetLen1();

int len2 = biggetLen2();

Systemoutprintln();

Systemoutprintln("第一个长整数的长度是: " + len1);

Systemoutprintln("第二个长整数的长度是: " + len2);

bigadd(num1,num2);

Systemoutprintln();

}

}

运行结果如下:

请输入第一个长整数: 222222222222222222222222222222222222222222555555555555555555555555

请输入第二个长整数 : 88888888888888888888888888888888888888899999999999999999999999999

第一个长整数的长度是: 66

第二个长整数的长度是: 65

相加的和为:311111111111111111111111111111111111111122555555555555555555555554

利用C语言编写一个求两数相加的和的编程思想和方法如下:

1首先需要定义三个变量a,b,c,两个为相加的数,第三个为相加后得到的和。

2然后使用scanf()语句接收从键盘输入的两个数,为变量a,b赋值。

3接着进行a和b的加法运算,将结果赋值给变量c。

4最后使用printf()语句将计算结果显示在屏幕上。

5代码编写完毕后,点击运行后即可在调试窗口看到程序的运行结果。

储存大整数很容易 用一个int数组就可以了

例如 array[0] = 1234567890

array[1] = 1234567890

合起来就是 12345678901234567890

运算的时候有点麻烦

不过有个取巧的办法

你读取 12345678901234567890 + 1234567890 的时候 截获 "+"

然后 用 后面的那个1234567890 和 a[0] 相加 如果a[0]超过10位 就把第11位 加到 a[1]里面 做为进位

减法相反即可。

如果是C# msdn 里面有 加减乘除

以上就是关于如何C语言中实现两个任意大小的整数的相加全部的内容,包括:如何C语言中实现两个任意大小的整数的相加、设计一个程序实现两个位数不超过 n 位的长整数的高精度加法 100 <= n <= 1000 用java编写.谢谢、怎样用C语言编一个两数相加的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10131969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存