带小数点的超长数据相加C++

#include <iostream>
#include <string>

using namespace std;

string sum(string str1, string str2)
{
    string temp = ".";
    string strTemp;
    int strlen1, strlen2,flag1=0,flag2=0,flag=0,xiao1,xiao2;
    int x, y;
    strlen1 = str1.length();
    strlen2 = str2.length();
    if (strlen1 == 0 && strlen2 == 0)
        return "NULL";
    for (int i = 0; i < strlen1; i++)
    {
        if (str1[i] == '.')
        {
            flag1 = i;
            break;
        }
    }
    for (int i = 0; i < strlen2; i++)
    {
        if (str2[i] == '.')
        {
            flag2 = i;
            break;
        }
    }
    if (flag1 == 0)
    {

        if (flag2 == 0)
        {
            if (strlen1 < strlen2)
            {
                string tempstr = str1;
                str1 = str2;
                str2 = tempstr;
                int numtemp = strlen1;
                strlen1 = strlen2;
                strlen2 = numtemp;
            }
            for ( x = strlen1 - 1,  y = strlen2 - 1; x>0, y >= 0; x--, y--)
            {
                str1[x] = str1[x] + (str2[y] - '0') + flag;
                if (str1[x] > '9')
                {
                    str1[x] = (str1[x] - 0x30) % 10 + '0';
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
            }
        }
        else
        {
            string str22 = str2.substr(flag2);
            string str21 = str2.substr(0,flag2);
            xiao2 = strlen2 - 1 - flag2;
            if (strlen1 < flag2 - 1)
            {
                string tempstr = str1;
                str1 = str21;
                str21 = tempstr;
            }
            for (x = str1.length() - 1, y = str21.length() - 1; x>0, y >= 0; x--, y--)
            {
                str1[x] = str1[x] + (str21[y] - '0') + flag;
                if (str1[x] > '9')
                {
                    str1[x] = (str1[x] - 0x30) % 10 + '0';
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
            }
            str1 += str22;
            
        }
    }
    else
    {
        if (flag2 == 0)
        {
            string str12 = str1.substr(flag1);
            string str11 = str1.substr(0, flag1);
            if (flag1 < strlen2)
            {
                string tempstr = str11;
                str11 = str2;
                str2 = tempstr;
            }
            for (x = str11.length() - 1, y = str2.length() - 1; x>0, y >= 0; x--, y--)
            {
                str11[x] = str11[x] + (str2[y] - '0') + flag;
                if (str11[x] > '9')
                {
                    str11[x] = (str11[x] - 0x30) % 10 + '0';
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
            }
            str1 =str11+str12;
        }
        else
        {
            string str12 = str1.substr(flag1+1);
            string str11 = str1.substr(0, flag1);
            string str22 = str2.substr(flag2+1);
            string str21 = str2.substr(0, flag2);
            string strr;
            cout << str12 << "  " << str22 << endl;
            cout << str11 << "  " << str21 << endl;
            if (str12.length() > str22.length())
            {
                strr = str12;
                str12 = str22;
                str22 = strr;
            }
            if (str11.length() < str21.length())
            {
                strr = str11;
                str11 = str21;
                str21 = strr;
            }
            for (x = str12.length() - 1; x >= 0; x--)
            {
                str22[x] = str12[x] + (str22[x] - '0') + flag;
                if (str22[x] > '9')
                {
                    str22[x] = (str22[x] - 0x30) % 10 + '0';
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
            }
            for (x = str11.length() - 1, y = str21.length() - 1; x>0, y >= 0; x--, y--)
            {
                str11[x] = str11[x] + (str21[y] - '0') + flag;
                if (str11[x] > '9')
                {
                    str11[x] = (str11[x] - 0x30) % 10 + '0';
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
            }
            str1 = str11 + "." + str22;
        }
    }

    return str1;

}
int main()
{
    string str1,str2;
    cin >> str1 >> str2;
    str1 = sum(str1, str2);
    cout << str1 << endl;
    system("pause");
    return 0;
    
}

 

 

///


string sum(string str1, string str2)
{
    string temp = ".";
    string strTemp;
    int strlen1, strlen2, flag1 = 0, flag2 = 0, flag = 0, xiao1, xiao2;
    int x, y;
    strlen1 = str1.length();
    strlen2 = str2.length();
    if (strlen1 == 0 && strlen2 == 0)
        return "NULL";
    if (strlen1 < strlen2)
        {
            string tempstr = str1;
            str1 = str2;
            str2 = tempstr;
            int numtemp = strlen1;
            strlen1 = strlen2;
            strlen2 = numtemp;
        }
    for (x = strlen1 - 1, y = strlen2 - 1; x>=0; x--)
    {
        if (y >= 0){
            str1[x] = str1[x] + (str2[y] - '0') + flag;
            if (str1[x] > '9')
            {
                str1[x] = (str1[x] - 0x30) % 10 + '0';
                flag = 1;
            }
            else
            {
                flag = 0;
            }
            y--;
        }
        else{
            str1[x] = str1[x] + flag;
            if (str1[x] > '9')
            {
                str1[x] = (str1[x] - 0x30) % 10 + '0';
                flag = 1;
            }
            else
            {
                flag = 0;
            }
            y--;
        }    
    }
    if (flag == 1){
        str1 = "1" + str1;
    }
    return str1;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值