题解 | #浮点数加法# 简单,轻松搞定

浮点数加法

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define N 1000
int main()
{
    char a[N]={'\0'},b[N]={'\0'};
    char x[N]={'\0'},y[N]={'\0'};
    scanf("%[^.].%s",a,b);
    while(getchar()!='\n');
    scanf("%[^.].%s",x,y);
//    printf("%s.%s\n%s.%s\n",a,b,x,y);
    int numa[N];
    int numb[N];//浮点

    int i,j;
    for(i=0;i<N;i++){
        numa[i]=-1;
        numb[i]=-1;
    }
    int lenb=strlen(b);int leny=strlen(y);
    int lena=strlen(a);int lenx=strlen(x);
    for(i=0;i<lenb || i<leny;i++){
        if(i<lenb&&i<leny){
            numb[i]=b[i]-'0'+y[i]-'0';
        }
        else if(i<lenb&&i>=leny){
            numb[i]=b[i]-'0';
        }
        else{
            numb[i]=y[i]-'0';
        }
    }
    int len=lenb>leny?lenb:leny;
    int flag=0;
    for(i=len-1;i>0;i--){
        while(numb[i]>9){
            numb[i]-=10;
            numb[i-1]++;
        }

    }
    while(numb[0]>=10){
        numb[0]-=10;
        flag++;

    }
    i=lena-1;j=lenx-1;
    int k=N-1;
    while(i>=0 || j>=0){
        if(i>=0&&j>=0){
            numa[k]=a[i]+x[j]-'0'-'0';
        }
        else if(i<0 && j>=0){
            numa[k]=x[j]-'0';
        }
        else{
            numa[k]=a[i]-'0';
        }
        k--;i--;j--;
    }
    k=N-1;
    numa[k]+=flag;
    //printf(" FLAG=%d ",flag);
    while(numa[k]!=-1){
    while(numa[k]>9){
        numa[k]-=10;
        if(numa[k-1]==-1){
          numa[k-1]=0;
        }
        numa[k-1]++;
    }
    k--;
    }
    for(i=0;i<N;i++){//输出num数组
        if(numa[i]!=-1){
            printf("%d",numa[i]);
        }

    }
    printf(".");
    for(i=0;i<N;i++){
        if(numb[i]!=-1){
            printf("%d",numb[i]);
        }

    }//
//    for(i=0;numb[i]!=-1;i++){
//        b[i]=numb[i]+'0';
//    }
//    b[i]='\0';
//
//    for(i=N-1;numa[i]!=-1;i--){
//        a[N-i-1]=numa[i]+'0';
//    }
//    if(numa[N-1]==0){
//        a[0]='0';
//        i=1;
//    }
//    a[i]='\0';
//    printf("%s.%s",a,b);

    return 0;
}

全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务