1007(固定格式的大数求和)

#include <iostream>


using namespace std;


int main()
{
    char str1[201],str2[201],res_str3[202];
    cin >> str1 >> str2;


    //确定字符串的长度;
    int i1(0),i2(0);
    while(str1[i1]!='\0')
     i1++;
    while(str2[i2]!='\0')
     i2++;


    //初始化第三个字符串;
    int i3,i4,carry_flag;
    i4 = i3 = i1 > i2 ? i1:i2;
    carry_flag = 0;


    //第一个数字;
    if((str1[i1-1]-'0'+(str2[i2-1]-'0'))>9)
    {
        res_str3[i3] = str1[i1-1]-'0'+(str2[i2-1]-'0')-10+'0';
        carry_flag = 1;
    }
    else
        res_str3[i3] = str1[i1-1]-'0'+(str2[i2-1]-'0')+'0';
    i1--;i2--;i3--;


    //第二个数字;
    if((str1[i1-1]-'0'+(str2[i2-1]-'0')+carry_flag)>9)
    {
        res_str3[i3] = str1[i1-1]-'0'+(str2[i2-1]-'0')-10+'0'+carry_flag;
        carry_flag = 1;
    }
    else
    {
        res_str3[i3] = str1[i1-1]-'0'+(str2[i2-1]-'0')+'0'+carry_flag;
        carry_flag = 0;
    }
    i1--;i2--;i3--;


    //小数点显示;
    res_str3[i3] = '.';
    i1--;i2--;i3--;


    //需要计算的部分
    while(i2>0&&i1>0)
    {
         if((str1[i1-1]-'0'+(str2[i2-1]-'0')+carry_flag)>9)
         {
              res_str3[i3] = str1[i1-1]-'0'+(str2[i2-1]-'0')-10+'0'+carry_flag;
              carry_flag = 1;
         }
         else
         {
              res_str3[i3] = str1[i1-1]-'0'+(str2[i2-1]-'0')+'0'+carry_flag;
              carry_flag = 0;
         }
         i1--;i2--;i3--;
    }


    //单独进位的部分
    if(i2!=0)
    {
        while(i2>0)
        {
            if((str2[i2-1]-'0'+carry_flag)>9)
            {
                res_str3[i3] = (str2[i2-1]-'0')-10+'0'+carry_flag;
                carry_flag = 1;
            }
            else
            {
                res_str3[i3] = (str2[i2-1]-'0')+'0'+carry_flag;
                carry_flag = 0;
            }
            i2--;i3--;
        }
    }
    if(i1!=0)
    {
        while(i1>0)
        {
            if((str1[i1-1]-'0'+carry_flag)>9)
            {
                res_str3[i3] = (str1[i1-1]-'0')-10+'0'+carry_flag;
                carry_flag = 1;
            }
            else
            {
                res_str3[i3] = (str1[i1-1]-'0')+'0'+carry_flag;
                carry_flag = 0;
            }
            i1--;i3--;
        }
    }
    if(carry_flag==1)
    {
        res_str3[i3] = '1';
        i3--;
    }
    i3++;


    for(;i4>=i3;i3++)
    {
        cout << res_str3[i3];
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值