Skip to content

Latest commit

 

History

History
109 lines (102 loc) · 2.67 KB

基础算法——大整数.md

File metadata and controls

109 lines (102 loc) · 2.67 KB

https://www.nowcoder.com/practice/6bc1dd2ee0ce4257821531719b8d1c83?tpId=62&tqId=29458&tPage=1&rp=1&ru=%2Fta%2Fsju-kaoyan&tab=answerKey

import java.util.*;
import java.math.*;
public class Main{
    public static void main(String[]args){
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
            BigInteger a,b,c;
            a=cin.nextBigInteger();
            b=cin.nextBigInteger();
            System.out.println(a.add(b));//加法
            System.out.println(a.subtract(b));//减法
            System.out.println(a.multiply(b));//乘法
        }
    }
}
#include <iostream>
using namespace std;
#include <vector>
#include<string>
 
class BigNum {
    int a[1000];
    const int MAX = 10;
    const int size = 1000;
public:
    BigNum() { fill(a, a + size, 0); }
    BigNum(string s) {
        fill(a, a + size, 0);
        for (int j = 0, i = s.size() - 1;i >= 0;i--, j++) {
            a[j] = s[i] - '0';
        }
    }
    void operator+(BigNum& B) {
        BigNum C;
        int carry = 0;
        for (int i = 0;i<size;i++) {
            C.a[i] = a[i] + B.a[i] + carry;
            carry = C.a[i] / MAX;
            C.a[i] = C.a[i] % MAX;
        }
        C.print();
    }
    void operator-(BigNum& B) {
        int pos = size - 1;
        while (a[pos] == B.a[pos])pos--;
        if(a[pos] < B.a[pos]){
            for (int i = 0,t;i<size;i++){
                t=a[i];
                a[i]=B.a[i];
                B.a[i]=t;
            }
            cout<<'-';
        }
         
        BigNum C;
        int carry = 0;
        for (int i = 0;i<size;i++) {
 
            C.a[i] = a[i] - B.a[i] - carry;
            if (C.a[i] < 0) {
                carry = 1;
                C.a[i] = C.a[i] + MAX;
            }
 
            else {
                carry = 0;
                C.a[i] = C.a[i] % MAX;
            }
        }
        C.print();
    }
 
    void operator*(BigNum& B) {
        BigNum C;
        for (int i = 0;i<500;i++) {
            int carry = 0;
            for (int j = 0;j<500;j++) {
                C.a[i + j] = a[i] * B.a[j] + C.a[i + j] + carry;
                carry = C.a[i + j] / MAX;
                C.a[i + j] = C.a[i + j] % MAX;
            }
        }
        C.print();
    }
 
    void print() {
        int i = size - 1;
        while (a[i] == 0)i--;
        for (;i >= 0;i--) {
            cout << a[i];
        }
        cout << endl;
    }
 
};
int main() {
    string s1, s2;
    while (cin >> s1 >> s2) {
        BigNum a(s1), b(s2);
        a + b;
        a - b;
        a * b;
    }
}