1007. 二哥领工资
题目描述
二哥当了多年的助教,今天终于要发工资了!二哥正在高兴之际,得知工资是分两部分发放的。第一部分是这学期的工资,另一部分是之前所有学期的工资总和。而领取工资时,出纳员会问二哥,两部分工资加在一起是多少,如果二哥回答错了,就只能领到这个学期的工资之前所有学期的劳动就白费了。
二哥从小道消息得知,出纳员是个对数字敏感的人,不能有一点差错,所以二哥需要一个程序来帮他算出精确的工资总和。
输入格式
输入共两行,每行是一个十进制表示的工资金额(没有正负号,小数点后有两位数字)。
输出格式
输出共一行,即精确的工资总和(没有正负号,小数点后有两位数字)。
说明
工资金额的有效数字位数不超过200位,并保证有小数点。
Sample Input
123.45
543.21
Sample Output
666.66
// 注意输出顺序和小数点
#include <iostream>
#include <stack>
#include <string.h>
#include <stdio.h>
using namespace std;
int main() {
//freopen("1.txt", "r", stdin);;
int max_length = 0;
char add1_char[210] = { 0 };
char add2_char[210] = { 0 };
int add1_int[210] = { 0 };
int add2_int[210] = { 0 };
char num;
stack<int> result;
int i = 0;
while ((num = getchar()) != '\n') {
if (num != '.') {
add1_char[i++] = num;
}
}
i = 0;
while ((num = getchar()) != '\n' && num != EOF) {
if (num != '.') {
add2_char[i++] = num;
}
}
max_length = (strlen(add1_char) > strlen(add2_char)) ? strlen(add1_char) : strlen(add2_char);
for (int i = 0; i < strlen(add1_char); i++)
add1_int[max_length - strlen(add1_char) + i] = add1_char[i] - 48;
for (int i = 0; i < strlen(add2_char); i++)
add2_int[max_length - strlen(add2_char) + i] = add2_char[i] - 48;
int flag1 = 0; // 进位标记
for (int j = max_length - 1; j >= 0; j--) {
result.push((add1_int[j] + add2_int[j] + flag1) % 10);
if (add1_int[j] + add2_int[j] + flag1 >= 10)
flag1 = 1;
else
flag1 = 0;
}
if (flag1 == 1)
result.push(1);
int size = result.size();
for (int i = 0; i < size; i++) {
if (size - i == 2)
cout << ".";
cout << result.top();
result.pop();
}
return 0;
}