Xử lý số nguyên lớn trong C/C++

#include<iostream>
#include<string>
using namespace std;

string add(string a, string b){
	string result = "";
	//them 0 vao dau de do dai 2 so bang nhau
	while(a.length() > b.length()) b = '0'+b;	
	while(a.length() < b.length()) a = '0' + a; //cong tu phai sang trai, dung bien nho la carry int carry = 0; for(int i = a.length() - 1; i >=0; i--){
		int kq = a[i] - 48 + b[i] - 48 + carry;		
		carry = kq / 10;
		result = (char) (kq % 10 + 48) + result;
	}	
	return result;
}

string sub(string a, string b){
	string result = "";
	//them 0 vao dau de do dai 2 so bang nhau
	while(a.length() > b.length()) b = '0'+b;	
	while(a.length() < b.length()) a = '0' + a;
	
	//truong hop a < b ket qua co dau am
	bool sig = false;
	if(a < b){ sig = true; swap(a, b); } //tru tu phai sang trai, dung bien muon la borrow int borrow = 0; for(int i = a.length() - 1; i >=0; i--){
		int kq = a[i] - (b[i] + borrow);
		if(kq < 0){ borrow = 1; kq = kq + 10; } else{ borrow = 0; } result = (char) (kq + 48) + result; } while(result.length() > 0 && result[0] == '0') result.erase(0, 1);	
	if(sig)
		result =  '-' + result;	
	return result;
}

string mul(string a, string b){
	string result = "0";	
	for(int i = a.length() - 1; i >= 0; i--){
		int carry = 0;
		int a1 = a[i] - 48;
		int kq = 0;
		string tmp = "";
		for(int j = b.length() - 1; j >= 0; j--){
			int b1 = b[j] - 48;
			kq = a1 * b1 + carry;	
			carry = kq / 10;
			tmp = (char)(kq % 10 + 48) + tmp;
		}		
		if(carry > 0){
			tmp = (char)(carry % 10 + 48) + tmp;
		}
		int x = a.length() - i - 1;
		while(x > 0){
			tmp = tmp + "0";
			x--;
		}
		result = add(result, tmp);
	}	
	while(result.length() > 0 && result[0] == '0'){
		result.erase(0, 1);
	}
	return result;
}

int main(){
	string a, b;
	cin>>a>>b;	
	cout<<add(a, b)<<endl;
	cout<<sub(a, b)<<endl;	
	cout<<mul(a, b);
	return 0;
}

Advertisement

Share this:

Like this:

Like

Loading…