qq_18147713 2021-12-09 00:08 采纳率: 73.8%
浏览 193
已结题

C语言编程问题求解答

题目描述
求2个浮点数相加的和

题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0

关于输入
第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。每组测试数据之间有一个空行,每行数据不超过100个字符

关于输出
n行,每组测试数据有一行输出是相应的和。输出保证一定是一个小数部分不为0的浮点数

例子输入
2
0.111111111111111111111111111111
0.111111111111111111111111111111

10000000.655555555555555555555555555555
1.444444444444444444444444444445
例子输出
0.222222222222222222222222222222
10000002.1

  • 写回答

4条回答 默认 最新

  • 五一编程 2021-12-09 00:35
    关注

    C语言版本的

    #include<stdio.h>
    #include<string.h>
    
    typedef struct _Ans
    {
        int ans1[150];
        int count1;
        int p10;
        int ans2[150];
        int count2;
        int p20;
    }Ans;
    
    
    int main(){
        int n;
        int i,j,k,t = 0, m = 0, l = 0;
        int alen,blen;
        char a[150],b[150];
        int a1[150]={0},b1[150]={0},a2[150]={0},b2[150]={0},ans1[150]={0},ans2[150]={0};
        scanf("%d",&n);
        
        if(n <= 0){
        return 0;
        }
    
        l = n;
        m = 0;
        Ans *ans = (Ans *)malloc(sizeof(Ans) * n);
        
        while(n--){
            scanf("%s",&a);
            scanf("%s",&b);
            alen=strlen(a);
            blen=strlen(b);
            for(i=0;i<150;i++){
                a1[i]=0;
                a2[i]=0;
                b1[i]=0;
                b2[i]=0;
                ans1[i]=0;
                ans2[i]=0;
                ans[m].ans1[i]=0;
                ans[m].ans2[i]=0;
            }
    
            ans[m].count1 = 0;
            ans[m].count2 = 0;
    
            ans[m].p10 = 0;
            ans[m].p20 = 0;
     
            for(i=0;i<alen;i++){
                if(a[i]=='.'){
                    k=0;
                    for(j=i-1;j>=0;j--){
                        a1[k++]=a[j]-'0';
                    }
                    k=0;
                    for(j=i+1;j<alen;j++){
                        a2[++k]=a[j]-'0';
                    }
                }
            }
            for(i=0;i<blen;i++){
                if(b[i]=='.'){
                    k=0;
                    for(j=i-1;j>=0;j--){
                        b1[k++]=b[j]-'0';
                    }
                    k=0;
                    for(j=i+1;j<blen;j++){
                        b2[++k]=b[j]-'0';
                    }
                }
            }
            for(i=140;i>0;i--){
                ans1[i]+=a2[i]+b2[i];
                if(ans1[i]>=10){
                    ans1[i-1]+=1;
                    ans1[i]-=10;;
                }
            }
            if (ans1[0]!=0) a1[0]=a1[0]+1;
     
            for(i=0;i<=140;i++){
                ans2[i]+=a1[i]+b1[i];
                if(ans2[i]>=10){
                    ans2[i]%=10;
                    ans2[i+1]+=1;
                }
            }
    
            for(i=140;i>=0;i--){
                if(ans2[i]!=0){
                    for(j=i;j>=0;j--){
                        ans[m].ans2[ans[m].count2++] = ans2[j];
                    }
                    break;
                }
            }
            if(i==-1) {
                ans[m].p20 = 1;
            }
            for(i=140;i>0;i--){
                if(ans1[i]!=0){
                    for(j=1;j<=i;j++){
                        ans[m].ans1[ans[m].count1++] = ans1[j];
                    }
                    break;
                }
            }
            if(i==0) 
            {
                ans[m].p10 = 1;
            }
            m ++;
            printf("\n");
        }
    
        printf("\n");
    
        for (i = 0; i < l; i++)
        {
            for (j = 0; j < ans[i].count2; j++)
            {
                printf("%d",ans[i].ans2[j]);
            }
    
            if(ans[i].p20==1) 
            {
                printf("0");
            }
            printf(".");
            for (j = 0; j < ans[i].count1; j++)
            {
                printf("%d",ans[i].ans1[j]);
            }
    
            if(ans[i].p10==1) 
            {
                printf("0");
            }
            printf("\n");
        }
    
        free(ans);
    
        return 0;
    }
    

    运行结果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月9日

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图