题解 | #浮点数加法#

    本题的重点是做好数字位置的匹配。对于小数点后的数下标开始时都指向较短的数字的最后一位,然后不断向前累加,这样就做好了小数点后的数字的计算;对于小数点前的数,也是从两个数字最后一位开始,但此时两个数字的下标不再一致,而是分别指向自己的末尾,这是与小数点后的数的区别,最后将进位做处理即可。

     所以分析了这么多,我们可以明显感觉到,应该将数字分成小数点后和小数点前,两块单独处理。

#include <any>
#include <bits/stdc++.h>
using namespace std;

int main() {
    string num1;
    string num2;

    while (cin >> num1 >> num2) {
	  //以点为界限,分为左右两部分
        string num1_left = num1.substr(0, num1.find('.'));
        string num1_right = num1.substr(num1.find('.') + 1,
            num1.size() - num1.find('.') - 1);

        string num2_left = num2.substr(0, num2.find('.'));
        string num2_right = num2.substr(num2.find('.') + 1,
            num2.size() - num2.find('.') - 1);
	  //保证num1的长度是大于num2的,因为我们的结果是保存在num1里的
        if (num1_left.size() < num2_left.size()) swap(num1_left, num2_left);
        if (num1_right.size() < num2_right.size()) swap(num1_right, num2_right);
	  //先处理小数点右边的计算
        int plus = 0;
        for (int i = num2_right.size() - 1; i >= 0; i--) {
            int num = (num1_right[i] + num2_right[i] + plus - 2 * '0') % 10;
            plus = (num1_right[i] + num2_right[i] + plus - 2 * '0') / 10;
            num1_right[i] = num + '0';
        }
	  //再处理小数点左边的计算
        int j = num1_left.size() - 1;
        for (int i = num2_left.size() - 1; i >= 0; i--) {
            
            int num = (num1_left[j] + num2_left[i] + plus - 2 * '0') % 10;
            plus = (num1_left[j] + num2_left[i] + plus - 2 * '0') / 10;
            num1_left[j] = num + '0';
            j--;
        }
	  
        while(j >= 0 && plus != 0) {
            int num = (num1_left[j] +  plus - '0') % 10;
            plus = (num1_left[j] + plus - '0') / 10;
            num1_left[j] = num + '0';
            j--;
        }

        if (plus != 0) cout << plus << num1_left << '.' << num1_right;
        else cout << num1_left << '.' << num1_right;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务