思路:
1.分别对其小数部分和整数部分,因为补0位置不同,所以分别对齐(注意对齐整数部分时小数点位置会变化)
2.小数部分加法和整数部分加法一样,用一个函数实现(注意跳过小数点)
3.最后检查结果进位
ps:如果题目还要求去掉小数点后的无效0:
//如果末尾是0或.,删除
while (str1.back() == '0' || str1.back() == '.') str1.pop_back();
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
void add(string& str1, string& str2, int& inc) {
int sum = 0;
for (int i = str1.size() - 1; i >= 0; i--) {
if (str1[i] == '.') continue;//跳过小数点
sum = inc + (str1[i] - '0' ) + ( str2[i] - '0');
str1[i] = sum + '0';
inc = 0;
if (sum > 9) {
str1[i] = (sum - 10) + '0';
inc = 1;
}
}
}
int main() {
string str1, str2;
while (getline(cin, str1)) { //输入第一行
getline(cin, str2);//输入第二行
int pos1 = str1.find('.');
int pos2 = str2.find('.');
//小数部对齐
while (str1.size() - pos1 > str2.size() - pos2) {
str2.push_back('0');
}
while (str1.size() - pos1 < str2.size() - pos2) {
str1.push_back('0');
}
//整数部分补齐
while (pos1 > pos2) {
str2.insert(0, "0");
pos2++;
}
while (pos1 < pos2) {
str1.insert(0, "0");
pos1++;
}
int inc = 0;
//两个数相加
add(str1, str2, inc);
if (inc) {
str1.insert(0, "1");
}
printf("%s\n", str1.c_str());
}
return 0;
}

京公网安备 11010502036488号