• 计算机考研真题 浮点数加法


    题目描述

    求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0

    输入描述:

    对于每组案例,每组测试数据占2行,分别是两个加数。

    输出描述:

    每组案例是n行,每组测试数据有一行输出是相应的和。
    输出保证一定是一个小数部分不为0的浮点数
    示例1

    输入

    123.111111111111111111111111111111
     79.911111111111111111111111111111

    输出

    203.022222222222222222222222222222



    
    
    //计算机考研真题 浮点数加法
    /*
    程序设计思想:
    大体构思:这道题和我之前那道a+b(大数加法)类似,可以把整数部分和小数部分分开求解。
    具体步骤:把整数部分和小数部分对齐,对齐就是使两浮点数字符串一样长,且小数点在相同的位置。
    1、从结尾开始每位相加 
    2、遇到‘.’,就加入“.”到结果字符串中 
    3、最高位有进位,要再进一位 
    4、输出结果字符串
    */
    //程序实现:
    #include <iostream>
    using namespace std;
     
    string addBigfloat(string sa, string sb)
    {
        string result, sc, sd;
        //面是将两浮点数对齐
        int ia = sa.find(".", 0);    //寻找小数点位置
        int ib = sb.find(".", 0);
        sc = (ia>ib)?sa:sb;    //整数部分长的
        sd = (ia>ib)?sb:sa;    //整数部分短的
        int n = (ia>ib)?(ia-ib):(ib-ia);    //整数部分长度的差值
        while(n--)
        {
            sd = "0"+sd;
        }
        int lenc = sc.length();
        int lend = sd.length();
        sa = (lenc>lend)?sc:sd;
        sb = (lenc>lend)?sd:sc;
        n = (lenc>lend)?(lenc-lend):(lend-lenc);    //小数部分长度的差值
        while(n--)
        {
            sb+="0";
        }
        //下面是对对齐后的浮点数进行相加
        int carry = 0;
        for(int i = sa.length()-1; i>=0; i--)
        {
            if(sa[i]=='.')    //遇到‘.’,就加入“.”到结果字符串中 
            {
                result = "."+result;
                continue;
            }
            char value = sa[i]-'0'+sb[i]-'0'+carry;    //保存两数之和结果
            result = char(value%10+'0')+result;    //将结果加入到结果字符串中
            carry = value/10;    //计算进位
        }
        while(carry!=0)    //若还有进位
        {
            result = char(carry%10+'0')+result;
            carry/=10;
        }
        return result;
    }
    int main()
    {
        string sa, sb;
        while(cin>>sa>>sb)
        {
            cout<<addBigfloat(sa, sb)<<endl;
        }
        return 0;
    }
    /*
    程序总结:
    对齐就是使两浮点数字符串一样长,且小数点在相同的位置,如
    4441976058474520796.650571
    9057183.9521
    对齐之后是:
    4441976058474520796.650571
    0000000000009057183.952100
    */
  • 相关阅读:
    C#基础学习(二)
    C#基础学习(一)
    使用finalshll连接linux
    如何在显示表控件的时候隐藏某些列
    SMARTFORMS文本编辑器设置为SAP系统默认的
    python教学 目录
    [Unity官方文档翻译]ScrollRect
    <转载>解决div里面img的缝隙问题
    简单插入类排序
    利用border和伪类画出三角形 ps:好久没写博客了。。。
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10014025.html
Copyright © 2020-2023  润新知