大数加乘

 1 #include <bits/stdc++.h> //大数相加
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     string a, b, res;
 7     cin >> a >> b;
 8     int i, k, inc, lena, lenb, temp;
 9     lena = a.length(); lenb = b.length();
10     for (i = lena - 1, k = lenb - 1, inc = 0; i >= 0 || k >= 0; --i, --k)
11     {
12         temp = inc;
13         if (i >= 0)
14         {
15         temp += a[i] - '0';
16         }
17         if (k >= 0)
18         {
19             temp += b[k] - '0';
20         }
21         res += temp % 10 + '0';
22         inc = temp / 10;
23     }
24     if (inc)
25     {
26     res += inc + '0';
27     }
28     reverse(begin(res), end(res));
29     cout << res << endl;
30     return 0;
31 }
#include<bits/stdc++.h> //大数相乘
using namespace std;

string strAdd(string a, string b, int shift)
{
    int i, j, inc, temp;
    string res;
    while (shift-- > 0)
    {
        b = '0' + b;
    }

    temp = inc = 0;
    int lena = a.length();
    int lenb = b.length();

    for (i = j = 0; i < lena || j < lenb; )
    {
	temp = inc;
	if (i < lena)
	{
        	temp += a[i] - '0';
		++i;
	}
	if (j < lenb)
	{
		temp += b[j] - '0';
		++j;
	}      
	inc = temp / 10;
	res += temp % 10 + '0';
    }
    if (inc)
        res += inc + '0';
    return res;
}

string strMulti(string a, string b)
{
    string res = "0";
    int i, j, lena, lenb, nTemp, inc;
    lena = a.length(), lenb = b.length();
    
    reverse(begin(a), end(a));
    reverse(begin(b), end(b));
    
    for (i = 0; i < lena; ++i)
    {
       	nTemp = inc = 0;
        string strTemp = "";
        for (j = 0; j < lenb; ++j)
        {
            nTemp = (a[i] - '0') * (b[j] - '0') + inc;
            inc = nTemp / 10;
            strTemp += nTemp % 10 + '0';
        }
	if (inc > 0)
	{
		strTemp += inc + '0';
	}
       res = strAdd(res, strTemp, i);
    }
    reverse(begin(res), end(res));
    bool flag = true;
    string finalRes;
    for (char c : res)
    {
	if (c == '0' && flag)
	{
		continue;
	}
	else 
	{
		flag = false;
	}
	finalRes += c;
    }
    return finalRes;
}

int main()
{
    string a, b;
    cin >> a >> b;
    cout << strMulti(a, b) << endl;
    return 0;
}

  

原文地址:https://www.cnblogs.com/deepspace/p/10336037.html