前面是高精度加法没问题,后来不知道怎么的编出来就有问题了
查看原帖
前面是高精度加法没问题,后来不知道怎么的编出来就有问题了
470283
crush2002楼主2021/1/24 20:05
#include <iostream>
using namespace std;
#include<string>
int compare(string str1, string str2)
{
    if (str1.length() > str2.length()) return 1;
    else if (str1.length() < str2.length())  return -1;
    else return str1.compare(str2);
}
//高精度加法
//只能是两个正数相加
string add(string str1, string str2)//高精度加法
{
    string str;
    int len1 = str1.length();
    int len2 = str2.length();
    //前面补0,弄成长度相同
    if (len1 < len2)
    {
        for (int i = 1; i <= len2 - len1; i++)
            str1 = "0" + str1;
    }
    else
    {
        for (int i = 1; i <= len1 - len2; i++)
            str2 = "0" + str2;
    }
    len1 = str1.length();
    int cf = 0;
    int temp;
    for (int i = len1 - 1; i >= 0; i--)
    {
        temp = str1[i] - '0' + str2[i] - '0' + cf;
        cf = temp / 10;
        temp %= 10;
        str = char(temp + '0') + str;
    }
    if (cf != 0)  str = char(cf + '0') + str;
    return str;
}
int main()
{
    string sta1;
    string sta2;
    int len1, len2;
    cin >> sta1 >> sta2;
    len1 = sta1.length();
    len2 = sta2.length();
   
    string str, str1, str2, str3;
    for (int m = len1 - 1; m >= 0; m--)
    {
     
        for (int i = len2 - 1; i >= 0; i--)
        {
            int  temp = (sta2[i]-'0') * (sta1[m]-'0');
            int cf = temp / 10;
            temp = temp % 10;
          
            str1 = char(temp - '0') + str1;
            if (cf != 0)
                str1 = char(cf - '0') + str1;
            for (int p = len2 - 1 - i; p > 0; p--)
                str1 = str1 + "0";//补足后面的0
            
            str2 =add(str2, str1);
        }

        for (int j = len1 - 1 - m; j > 0; j--)
            str2 = str2 + "0";//补足后面的0
        
        string str3;
        str3= add(str2, str3);
        string str4=str3.erase(0, str3.find_first_not_of('0'));
        cout << str4 << endl;
    }
}

2021/1/24 20:05
加载中...