题解 | #浮点数加法#

浮点数加法

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");
}

全部评论

相关推荐

投递网易雷火等公司6个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务