解决大数的最好方法就是用java,然还是要写点C++
- import java.math.BigInterger;
- import java.util.Scanner;
- public class Main(){
- public static void main(String[] args){
-
- Scanner in = new Scanner(System.in);
-
- while(in.hasNext())
- {
- string a = in.next();
- string b = in.next();
- BigInteger c = new BigInteger(a);
- BigInteger d = new BigInteger(b);
- System.out.printIn( c.ad(d) );
- }
- }
- }
【加法】
- string Add(string one, string two)
- {
- int a,b;
- int max;
- string sum;
- alen = one.size();
- blen = two.size();
- if(a >= b)
- max = alen;
- else
- max = blen;
- sum.resize(max,'0');
- for(int i=0; i<alen; i++)
- sum[max-i-1] = sum[max-i-1] + one[alen-i-1] - '0';
- for(int i=0; i<blen; i++)
- sum[max-i-1] = sum[max-i-1] + two[blen-i-1] - '0';
- for(int i=max-1; i>=1; i--)
- if(sum[i] >'9')
- {
- sum[i] -= 10;
- sum[i-1]++;
- }
- if(sum[0] >'9')
- {
- sum[0] -= 10;
- sum[0] ++ ;
- }
- return sum;
- }
-
【减法】
- #include<iostream>
- #include<string>
- using namespace std;
- bool positive = true;
-
- int main(){
- string big,small;
- cin>>big>>small;
-
- if(big==small) cout<<0; return 0;
-
- if(small.size() > big.size() || (small.size()==big.size() && small>big))
- {
- positive = false;
- swap(big,small);
- }
- if(small.size() < big.size())
- small.insert(0, big.size()-small.size(), 48);
- int flag = 0;
- for(int i=big.size()-1; i>=0; i--)
- {
- big[i] += big[i] - small[i] - flag;
- if(big[i] < 0)
- {
- big[i] += 10;
- flag = 1;
- }else
- flag = 0;
- big[i] += 48;
- }
-
- if(!positive)
- cout<<"-";
- return 0;
- }
【附】
1、resize(n)
调整容器的长度大小,使其能容纳n个元素。
如果n小于容器的当前的size,则删除多出来的元素。
否则,添加采用值初始化的元素。
2、 resize(n,t)
多一个参数t,将所有新添加的元素初始化为t。