标签:can bre 大整数 integer 代码实现 back view 结果 clu
一、Java类BigInteger实现大数加
1.代码如下:
import java.math.BigInteger; import java.util.Scanner; public class BigNumberAdd { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String str1 = scanner.nextLine(); String str2 = scanner.nextLine(); String result = new BigInteger(str1).add(new BigInteger(str2)).toString(); System.out.println(result); } }
2.测试示例如下:
二、Java语言实现
1.思路:(1)反转两个大整数字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
(2)对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
(3)把两个正整数相加,一位一位的加并加上进位;
(4)最高位有进位则补上。
2.代码实现:
import java.util.Scanner; public class BigNumberAdd { public static String BigIntegerAdd(String string1,String string2){ StringBuffer result = new StringBuffer(); //反转大整数字符串 string1 = new StringBuffer(string1).reverse().toString(); string2 = new StringBuffer(string2).reverse().toString(); int length1 = string1.length(); int length2 = string2.length(); int maxLength = length1>length2?length1:length2; int index = 0;//进位 if(length1<length2){ for(int i = length1;i<length2;++i){ string1+=‘0‘; } } else if(length1>length2){ for(int i = length2;i<length1;++i){ string2+=‘0‘; } } for(int i=0;i<maxLength;++i){ int nSum = Integer.parseInt(string1.charAt(i)+"")+Integer.parseInt(string2.charAt(i)+"")+index; int num = nSum%10; result.append(num); index = nSum/10; } if(index>0){ result.append(index); } return result.reverse().toString(); } public static void main(String[] args){ Scanner scanner = new Scanner(System.in); String addNumber1 = scanner.nextLine(); String addNumber2 = scanner.nextLine(); System.out.println(BigNumberAdd.BigIntegerAdd(addNumber1,addNumber2)); } }
3.测试示例如下:
三、C++语言实现
1.分析:因为计算机计算的数值位数有限,当要算两个几百位,几千位或者更大位数的加法时,直接输入不能再进行计算,所以要编写程序来模拟加法的运算过程,这样不管多少位的加法问题,都可以计算出来。
2.基本思路:输入的时候两个数都是以字符串的形式输入的,测出每个字符串的长度(也就是该数的位数),因为字符串不能直接进行运算,所以测出长度之后将字符串形的数反向转化为整形数组的形式(例如输入两个数为100和10,转化为整形数组形式储存为001和01,让低位在前,是运算更方便),然后进行运算。
要用到两个字符型数组来先保存输入的数,再定义3个整形数组,要将这三个数组中的元素开始的时候全部清零,其中两个来储存将字符型数转化过的整型数,再有一个就是来保存运算结果的数组。
3.代码实现
#include<iostream> #include<algorithm> #include<string> using namespace std; int main(void) { string addNumber1, addNumber2, result; //输入两个大整数字符串 cin >> addNumber1 >> addNumber2; //位数较少的大整数字符串放在第二位 if (addNumber1.size() < addNumber2.size()) { string temp = addNumber1; addNumber1 = addNumber2; addNumber2 = temp; } int length = addNumber1.size() - addNumber2.size(); string flag(length, ‘0‘); //较短的字符串前面补‘0’,使两个字符串等长。 addNumber2 = flag + addNumber2; int index = 0;//进位 for (int i = addNumber1.size() - 1; i >= 0; --i) { int sum = (addNumber1[i] - ‘0‘) + (addNumber2[i] - ‘0‘) + index; if (sum > 9) { result.push_back((sum - 10) + ‘0‘); index = 1; } else { result.push_back(sum + ‘0‘); index = 0; } } result.push_back(index + ‘0‘); //去掉结果的前置0 for (int i = result.size() - 1; i >= 0; --i) { if (result[i] == ‘0‘) { result.pop_back(); } else { break; } } //大整数和逆序输出 for (string::reverse_iterator item = result.rbegin(); item != result.rend(); ++item) { cout << *item; } cout << endl; return 0; }
4.测试示例:
标签:can bre 大整数 integer 代码实现 back view 结果 clu
原文地址:https://www.cnblogs.com/Tomorrow-will-be-better/p/11094202.html