View Code of Problem 132

#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
struct bigint {
	int d[401];
	int len;
};
bigint change(string a) {
	bigint c;
	c.len = a.size();
	for (int i = 0; i < 401; i++) {
		c.d[i] = 0;
	}
	for (int i = 0; i < c.len; i++) {
		c.d[i] = a[i] - '0';
	}
	return c;
}
bigint add(bigint a, bigint b,int &carry) {
	bigint c;
	c.len = 0;
	int max = a.len > b.len ? a.len : b.len;
	for (int i = max - 1; i >= 0;i--) {
		int t = a.d[i] + b.d[i] + carry;
		c.d[c.len++] = t % 10;
		carry = t / 10;
	}
	return c;
}
int main() {
	string s1, s2;
	string b,d;
	while (cin>>s1>>s2) {
		int k = s1.find(".");
		if (k == -1) {
			b="";
		}
		else {
			b=s1.substr(k+1,s1.size()-k);
		}
		string a(s1, 0, k);	
		k = s2.find(".");
		string c(s2, 0, k);
		if (k == -1) {
			d = "";
		}
		else {
			d = s2.substr(k + 1, s2.size() - k);
		}
		bigint x = change(b);
		bigint y = change(d);
		int carry=0;
		bigint m = add(x, y, carry);
		bigint p = change(a);
		bigint q = change(c);
		bigint n = add(p, q, carry);
		if (carry != 0) {
			n.d[n.len++] = carry;
		}
		for (int i = n.len - 1; i >= 0; i--) {
			printf("%d", n.d[i]);
		}
		int flag = 0;
		for (int i = 0; i < m.len; i++) {
			if (m.d[i] != 0) {
				flag = 1;
				break;
			}
		}
		if (flag) {
			printf(".");
			for (int i = m.len - 1; i >= 0; i--) {
				printf("%d", m.d[i]);
			}
		}
		printf("\n");
	}

}

Double click to view unformatted code.


Back to problem 132