文章

4

粉丝

171

获赞

5

访问

15.1k

头像
1258:浮点数加法(模拟)
P1258 北京大学机试题
发布于2022年7月26日 12:27
阅读数 4.3k

一道模拟的题目,思路与大整数加法类似

  • 为了便于计算,补充0使得两个串的长度相同
    • 在左侧、右侧都需要做补充
  • 可先进行加法,后处理进位

代码如下:

//
// Created by Jason Liu on 2022/7/26.
//
#include<iostream>
#include<string>
using namespace std;
string a, b;
int main(){
    cin >> a >> b;
    int sa = a.size();
    int sb = b.size();
    // 找到小数点位置
    int pos1 = a.find('.');
    int pos2 = b.find('.');
    // 在较短串的前面补充0
    if(pos1 < pos2){
        for(int i=1; i<=pos2-pos1; i++){
            a.insert(a.begin(), '0');
        }
    }else {
        for (int i = 1; i <= pos1 - pos2; i++) {
            b.insert(b.begin(), '0');
        }
    }
    // 可能出现进位情况,所以第一位补充0
    a.insert(a.begin(), '0');
    b.insert(b.begin(), '0');

    int l1 = sa - pos1 -1;
    int l2 = sb - pos2 - 1;
    // 末尾补充0,这样补完之后,两个串的长度一样,便于计算
    if(l1 < l2){
        for(int i=1; i<=l2-l1; i++){
            a.insert(a.end(), '0');
        }
    }else {
        for(int i=1; i<=l...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发