KY79 浮点数加法

本文详细解析了KY79中浮点数加法的实现过程,探讨了遇到的问题和优化策略,重点在于处理小数点后的进位与补零操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KY79 浮点数加法

一道写了一晚上的题目

在这里插入图片描述

一些每次改错只改一个的痛苦

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1,s2;
    while(cin>>s1){
        cin>>s2;
        int a[100];
        int b[100];
        int result1[100]={0},result2[100]={0};
        int indexa,indexb;
        for(int i=0;i<s1.size();i++){
            if(s1[i]=='.')
                indexa=i;
        }
        for(int i=0;i<s2.size();i++){
            if(s2[i]=='.')
                indexb=i;
        }
        int i,j;



        int k=0;
        for(i=s1.size()-1,j=s2.size()-1;i>indexa&&j>indexb;i--,j--){
            while(i-indexa>j-indexb){
                result2[k]=s1[i]-'0';
                i--;
                k++;
            }
            while(i-indexa<j-indexb){
                result2[k]=s2[j]-'0';
                j--;
                k++;
            }
            result2[k]+=s1[i]-'0'+s2[j]-'0';
           // cout<<result2[k]<<endl;
            if(result2[k]>=10){
                    //cout<<k<<endl;
                    //cout<<max(s1.size()-1-indexa,s2.size()-1-indexb)<<endl;
                    if(k==max(s1.size()-1-indexa,s2.size()-1-indexb)-1){
                        result1[0]+=1;
                        result2[k]=result2[k]%10;
                        k++;
                        continue;
                    }
                    result2[k]=result2[k]%10;
                    result2[++k]+=1;
                    continue;

                }

                k++;
        }
        //cout<<k<<endl;
        //cout<<result1[0]<<endl;
        if(result2[k]==0) k--;
        int xiao=k;
        k=0;
        for(i=indexa-1,j=indexb-1;i>=0&&j>=0;i--,j--){
                result1[k]+=s1[i]-'0'+s2[j]-'0';
                //cout<<result1[k]<<endl;
                if(result1[k]>=10){
                    result1[k]=result1[k]%10;
                    result1[++k]+=1;
                    continue;

                }

                k++;


        }
        while(i>=0){
            result1[k]+=s1[i]-'0';
            //cout<<result1[k]<<endl;
            i--;
            k++;
        }
        while(j>=0){
            result1[k]+=s2[j]-'0';
            j--;
            k++;
        }
        if(result1[k]==0) k--;
        int zheng=k;

        for(int m=zheng;m>=0;m--){
            cout<<result1[m];
        }
        cout<<'.';
        for(int m=xiao;m>=0;m--){
            cout<<result2[m];
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值