プラス多数

、JavaクラスのBigInteger多数の実現にプラス

1.次のようにコードがあります。

インポートがjava.math.BigInteger;
インポートjava.util.Scanner; 

パブリック クラスBigNumberAdd { 

    公共 静的 ボイドメイン(文字列[]引数){ 

        スキャナスキャナ = 新しいスキャナ(System.in)。

        文字列STR1 = scanner.nextLine()。
        文字列STR2 = scanner.nextLine()。

        文字列結果 = 新規のBigInteger(STR1).add(新規のBigInteger(STR2))のtoString()。

        System.out.println(結果)。
    } 
}
コードの表示

 2.次のように試験例は、次のとおり

二、Java言語

1.アイデア:

(1)は、二つの大きな整数列を逆にローからハイへの添加を容易にするためのビットの数の最上位ビットは、増加につながると、
すなわち「0」の高い短い文字列と、(2)は、2つの文字列が整列されています後添加を容易にするために、充填された;
(3)2つの正の整数の和、及び添加プラスキャリー;
(4)最上位ビットがキャリーフィルです。

 

2.コードの実装:

インポートjava.util.Scanner; 

パブリック クラスBigNumberAdd { 

    パブリック 静的文字列BigIntegerAdd(文字列の文字列1、文字列の文字列2){ 
        StringBufferの結果 = 新しいStringBufferの(); 

        // 反转大整数字符串 
        文字列1 = 新しいStringBufferを(文字列1).reverse()のtoString(); 
        string2の = 新しい。StringBufferの(string2の).reverse()のtoString(); 

        INT長さ1 = string1.length()。
        INT LENGTH2 = string2.length()。
        int型のmaxLength =長さ1>長さ2?長さ1:長さ2。

        int型インデックス= 0; // 进位
        場合(長さ1 < 長さ2){
             ためINT I =長さ1; I <LENGTH2; ++ I){ 
                文字列1 + = '0' 
            } 
        } 
        そう であれば(長さ1> 長さ2){
             ためINT I = LENGTH2; I <長さ1; ++ I){ 
                文字列2 + = '0' 
            } 
        } 

        のためにint型 ; I <maxLengthの++ iは= 0 {I)
             INTをnSum = Integer.parseInt(string1.charAt(I)+ "")+ Integer.parseInt(string2.charAt(I)+ "")+ 指数;
            int型 NUM = nSum%10 
            result.append(NUM)。
            インデックス = nSum / 10 
        } 
        もし(指数> 0 ){ 
            result.append(インデックス)
        } 
        戻りresult.reverse()のtoString()。
    } 


    パブリック 静的 ボイドメイン(文字列[]引数){ 

        スキャナスキャナ = 新しいスキャナ(System.in)。

        ストリングaddNumber1 = scanner.nextLine()。
        文字列addNumber2 =scanner.nextLine(); 

        System.out.println(BigNumberAdd.BigIntegerAdd(addNumber1、addNumber2))。
    } 
    
}
コードの表示

3.試験例:

三、C ++言語

      1.分析:なぜならコンピュータの桁の限られた数の計算、ビット以上のビット数千二百、さらには、入力を直接計算することができない場合場合、カウントするので、加算の動作をシミュレートするプログラムを書くことプロセス、多くのほかの問題を算出することができるどんなにようにします。

      2.基本的な考え方:二つの数字が入力文字列として入力された場合、文字列を直接計算することができないように、そう測定し、各列(ビットすなわち数)の長さを測定(以前の低い、操作がより便利になるように、例えば二つの入力10及び100個の原子をアレイストレージ001と01の形に成形)成形のアレイの形に成形逆の数の文字列の長さの後に、次いで運営。

      最初の入力を保存するために、2つの文字列に番号を使用して、あなたが変換した文字の数を格納するために、配列にそれらのうちの2つをすべてクリアし、これらの三つの要素を開始したいときに、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