大数加

一、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);
    }
}
View Code

 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));
    }
    
}
View Code

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;
}
View Code

    4.测试示例:

 

猜你喜欢

转载自www.cnblogs.com/Tomorrow-will-be-better/p/11094202.html