题解 | #排序#
浮点数加法
http://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
using namespace std;
struct Float {
vector<int> Integer;
vector<int> Decimal;
};
void Print(Float x) {
for (int i = 0; i < x.Integer.size(); i++) {
cout << x.Integer[i];
}
cout << ".";
for (int i = 0; i < x.Decimal.size(); i++) {
cout << x.Decimal[i];
}
cout << endl;
}
Float Add(Float x, Float y) {
int n;
if (x.Decimal.size() > y.Decimal.size()) {
n = x.Decimal.size() - y.Decimal.size();
for (int i = 0; i < n; i++) {
y.Decimal.push_back(0);
}
}else if (x.Decimal.size() < y.Decimal.size()) {
n = y.Decimal.size() - x.Decimal.size();
for (int i = 0; i < n; i++) {
x.Decimal.push_back(0);
}
}
if (x.Integer.size() > y.Integer.size()) {
n = x.Integer.size() - y.Integer.size();
for (int i = 0; i < n; i++) {
y.Integer.insert(y.Integer.begin(), 0);
}
}else if (x.Integer.size() < y.Integer.size()) {
n = y.Integer.size() - x.Integer.size();
for (int i = 0; i < n; i++) {
x.Integer.insert(x.Integer.begin(), 0);
}
}
int in = 0;
for (int i = x.Decimal.size() - 1; i >= 0; i--) {
x.Decimal[i] = x.Decimal[i] + y.Decimal[i] + in;
if (x.Decimal[i] >= 10) {
x.Decimal[i] -= 10;
in = 1;
}else{
in = 0;
}
}
for (int i = x.Integer.size() - 1; i >= 0; i--) {
x.Integer[i] = x.Integer[i] + y.Integer[i] + in;
if (x.Integer[i] >= 10) {
x.Integer[i] -= 10;
in = 1;
}else {
in = 0;
}
}
if (in == 1) {
x.Integer.insert(x.Integer.begin(), 1);
}
return x;
}
int main() {
int pos;
string str1, str2;
Float x, y;
while (cin >> str1 >> str2) {
pos = str1.find(".");
for (int i = 0; i < pos; i++) {
x.Integer.push_back(str1[i] - '0');
}
for (int i = 0; i + pos + 1 < str1.size(); i++) {
x.Decimal.push_back(str1[i + pos + 1] - '0');
}
pos = str2.find(".");
for (int i = 0; i < pos; i++) {
y.Integer.push_back(str2[i] - '0');
}
for (int i = 0; i + pos + 1 < str2.size(); i++) {
y.Decimal.push_back(str2[i + pos + 1] - '0');
}
Print(Add(x, y));
}
return 0;
}