大数加
Posted tomorrow-will-be-better
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数加相关的知识,希望对你有一定的参考价值。
一、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.测试示例:
以上是关于大数加的主要内容,如果未能解决你的问题,请参考以下文章
(母函数 Catalan数 大数乘法 大数除法) Train Problem II hdu1023