要实现任意大小两个整数相加,那么就不能存在溢出情况。所以无法使用任何系统类型,唯一的方式是用数组模拟整数存储,并自行实现加法 *** 作算法。
需要注意以下几点:
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语言编一个两数相加的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)