实数相加(蓝桥)

题目链接

https://www.dotcpp.com/oj/problem1517.html

解题思路

分别整数部分和小数部分计算。
整数部分:高精度大整数相加,注意小数部分来的进位。
小数部分:与整数部分一样,要从低位加起,注意保存给个位的进位。
对于整数部分,我们依旧采取逆置字符串的方式;
对于小数部分,我们不可以逆置字符串,因为逆置字符串之后,小数部分实现了低位对齐相加,这样与小数部分的加法规则不符。因此,我们正序保存小数部分,倒序相加,对个位的进位保存在数组的第一个元素位置即可。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=110;
char s1[N],s2[N];
int num1,num2,num3,num4;
int maxx1,maxx2;
int len1,len2;
int tmp[N];
int xiao_a[N],zheng_a[N];
int xiao_b[N],zheng_b[N];
int xiao_c[N],zheng_c[N];
int main(){
    cin>>s1+1>>s2+1;
    len1=strlen(s1+1);
    len2=strlen(s2+1);
    //把第一个加数的整数部分分割出来,并逆置保存
    for(int i=1;i<=len1;i++){
        if(s1[i]=='.') break;
        tmp[++num1]=s1[i]-'0';//临时数组,正序保存了整数部分
    }
    for(int i=1;i<=num1;i++)
        zheng_a[num1-i+1]=tmp[i];
    //把第二个加数的整数部分分割出来,并逆置保存
    for(int i=1;i<=len2;i++){
        if(s2[i]=='.') break;
        tmp[++num2]=s2[i]-'0';
    }
    for(int i=1;i<=num2;i++)
        zheng_b[num2-i+1]=tmp[i];
    //第一个数小数部分的保存
    for(int i=num1+2;i<=len1;i++)
        xiao_a[++num3]=s1[i]-'0';
    //第二个数小数部分的保存
    for(int i=num2+2;i<=len2;i++)
        xiao_b[++num4]=s2[i]-'0';
    //小数部分相加    
    maxx1=max(num3,num4);    
    for(int i=maxx1;i>=1;i--){
        xiao_c[i]+=xiao_a[i]+xiao_b[i];
        xiao_c[i-1]=xiao_c[i]/10;
        xiao_c[i]%=10;
    }
    //整数部分相加
    zheng_c[1]=xiao_c[0];//先保存上小数部分的进位
    maxx2=max(num1,num2);
    for(int i=1;i<=maxx2;i++){
        zheng_c[i]+=zheng_a[i]+zheng_b[i];
        zheng_c[i+1]=zheng_c[i]/10;
        zheng_c[i]%=10;
    }
    if(zheng_c[maxx2+1]!=0) maxx2++;//勿忘
    //输出整数部分
    for(int i=maxx2;i>=1;i--)
        cout<<zheng_c[i];

    if(maxx1!=0){//判断是否存在小数部分,不存在就不进行输出,存在时先输出小数点再输出小数部分
        cout<<'.';
        for(int i=1;i<=maxx1;i++)
            cout<<xiao_c[i];
    }

    return 0;

} 

总结

顺着的写就行,只要掌握熟练了大整数相加,这个就没什么问题了

小白的高精度 文章被收录于专栏

讲讲高精度基础,小白入门

全部评论

相关推荐

书海为家:实习是成为大厂正式员工很好的敲门砖,看您的简历中有一段实习经历,挺好的。我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己实习时做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务