首页 > 试题广场 >

浮点数加法

[编程题]浮点数加法
  • 热度指数:18410 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0

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


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

输入

0.111111111111111111111111111111
0.111111111111111111111111111111

输出

0.222222222222222222222222222222
#include<stdio.h>
#include<string.h>
int main(void){
    char a[100],b[100];
    scanf("%s %s",a,b);
    int len1,len2;
    len1=strlen(a);
    len2=strlen(b);
    int jinwei=0;
    int ap,bp;
    //找小数点的位置
    for(int i=0;i<len1;i++){
        if(a[i]=='.'){
            ap=i;
        }
    }
    for(int i=0;i<len2;i++){
        if(b[i]=='.'){
            bp=i;
        }
    }
    //先计算小数部分
    //对长度较短的那个数进行扩充
    int _len1=len1-ap-1;
    int _len2=len2-bp-1;
    int cha;
    int z_len;
    if(_len1>_len2){
        cha=_len1-_len2;
        for(int i=len2;i<len2+cha;i++){
            b[i]='0';
        }
        z_len=_len1;
    }else{
        cha=_len2-_len1;
        for(int i=len1;i<len1+cha;i++){
            a[i]='0';
       }
        z_len=_len2;
    }

    int sum[z_len];
    int temp=0;
    int xs_jw;
    for(int i=z_len-1;i>-1;i--){
        sum[i]=(a[ap+i+1]-48+b[bp+i+1]-48+temp)%10;
        temp=(a[ap+i+1]-48+b[bp+i+1]-48+temp)/10;
    }
    
    xs_jw=temp;
//     printf("小数部分相加结果:\n");
//     for(int i=0;i<z_len;i++){
//         printf("%d ",sum[i]);
//     }
//     printf("\n");
//     printf("小数部分相加进位:\n");
//     printf("%d",xs_jw);
//     printf("\n");
    
    
    //再计算整数部分
    //在短的前面补零
    int zz_len;
    if(ap>bp){ //b较短
        zz_len=ap;
        cha=ap-bp;
        for(int i=bp-1;i>-1;i--){
            b[i+cha]=b[i];
        }
        //补充前面的0
        for(int i=0;i<cha;i++){
            b[i]='0';
        }
        
    }else{
        zz_len=bp;
        cha=bp-ap;
        for(int i=ap-1;i>-1;i--){
            a[i+cha]=a[i];
        }
        //补充前面的0
        for(int i=0;i<cha;i++){
            a[i]='0';
        }
    }
    
    
    
    
    
    int sum2[zz_len];
    int temp2=xs_jw;
    int zs_jw;
    for(int i=zz_len-1;i>-1;i--){
        sum2[i]=(a[i]-48+b[i]-48+temp2)%10;
//         printf("%d  ",sum2[i]);
        temp2=(a[i]-48+b[i]-48+temp2)/10;
//         printf("%d  ",temp2);
//         printf("\n");
    }
    
    zs_jw=temp2;
//     printf("整数部分相加结果:\n");
//     for(int i=0;i<zz_len;i++){
//         printf("%d ",sum2[i]);
//     }
//     printf("\n");
//     printf("整数部分相加进位:\n");
//     printf("%d",zs_jw);
//     printf("\n");
    
    
//     printf("最后的结果:");
    if(zs_jw!=0){
       printf("%d",zs_jw);
        }
     for(int i=0;i<zz_len;i++){
            printf("%d",sum2[i]);
    }
    printf(".");
    for(int i=0;i<z_len;i++){
            printf("%d",sum[i]);
    }
    
    return 0;
}

发表于 2022-03-19 16:39:07 回复(0)

问题信息

难度:
1条回答 9770浏览

热门推荐

通过挑战的用户

查看代码