题解 | #浮点数加法#

浮点数加法

https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8

#include <stdio.h>
#include<string.h>
int main() {
    char a[10007],b[10007],sum[100007]={'\0'};
    int i=0,j=0;
    int ia,ib;
    int la,lb;
    int flag=0;
    int is=0;
    scanf("%s\n%s",a,b);
    la=strlen(a);
    lb=strlen(b);
    for(i=0;a[i]!='.';i++);
    for(j=0;b[j]!='.';j++);
    if((la-i)>(lb-j)){
        for(int k=0;k<la-i-lb+j;k++){
            b[lb+k]='0';
        }
        lb+=la-i-lb+j;
    }
    else if((la-i)<(lb-j)){
        for(int k=0;k<lb-j-la+i;k++){
            a[la+k]='0';
        }
        la+=lb-j-la+i;
    }
    //补齐结束
    for(ia=la,ib=lb;ia>i&&ib>j;ia--,ib--){
        int s;
        s=(a[ia]-'0'+b[ib]-'0'+flag);
        if(s>9) {
            flag=1;
            sum[is]=(s-10)+'0';
        }
        else {
            flag=0;
            sum[is]=s+'0';
        }
        is++;
    }
    sum[is]='.';
    is++;
    for(ia=i-1,ib=j-1;ia>=0&&ib>=0;ia--,ib--){
        int s;
        s=(a[ia]-'0'+b[ib]-'0'+flag);
        if(s>9) {
            flag=1;
            sum[is]=(s-10)+'0';
        }
        else {
            flag=0;
            sum[is]=s+'0';
        }
        is++;
    }
    while(ia>=0){
        int s;
        s=(a[ia]-'0'+flag);
        if(s>9) {
            flag=1;
            sum[is]=(s-10)+'0';
        }
        else {
            flag=0;
            sum[is]=s+'0';
        }
        is++;
        ia--;
    }
    while(ib>=0){
        int s;
        s=(b[ib]-'0'+flag);
        if(s>9) {
            flag=1;
            sum[is]=(s-10)+'0';
        }
        else {
            flag=0;
            sum[is]=s+'0';
        }
        is++;
        ib--;
    }
    for(int m=is-1;m>0;m--){
        printf("%c",sum[m]);
    }
    printf("\n");
}

全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务