mooyyu

B4 - 高精度加法

c++11 basic vector

class integer {
	vector<char> ar;
	void carry(char &x, int &flag) {
		if (x < 10) flag = 0;
		else x -= 10, flag = 1;
	}
public:
	explicit integer(const string &s) {
		ar.resize(s.length());
		for (int i = 0, j = (int)s.length() - 1; i < ar.size(); ++i, --j) ar[i] = s[j] - '0';
	}
	integer& add(integer &tar, integer &ret) {
		static int flag;
		if (ar.size() < tar.ar.size()) return tar.add(*this, ret);
		ret.ar.resize(ar.size());
		flag = 0;
		for (int i = 0; i < tar.ar.size(); i++) {
			ret.ar[i] = ar[i] + tar.ar[i] + flag;
			carry(ret.ar[i], flag);
		}
		for (int i = tar.ar.size(); i < ar.size(); i++) {
			ret.ar[i] = ar[i] + flag;
			carry(ret.ar[i], flag);
		}
		if (flag) ret.ar.push_back(1);
		return ret;
	}
	void output() {
		for (int i = (int)ar.size() - 1; i >= 0; --i) printf("%d", ar[i]);
		putchar(10);
	}
};