大整數相乘

題目描述

有兩個用字符串表示的非常大的大整數,算出他們的乘積,也是用字符串表示。不能用系統自帶的大整數類型。

輸入描述:

空格分隔的兩個字符串,代表輸入的兩個大整數

輸出描述:

輸入的乘積,用字符串表示

示例1

輸入

複製

72106547548473106236 982161082972751393

輸出

複製

70820244829634538040848656466105986748

 

 

int main()
{
    string str1,str2;
    cin >> str1 >> str2;
    int len1 = str1.size();
    int len2 = str2.size();
    string ans(len1 + len2, '0');
    int x = 0;
    for(int i = len1 - 1; i>= 0; i--)
    {
        for(int j = len2 - 1; j >= 0; j--)
        {
            int val1 = str1[i] - '0';
            int val2 = str2[j] - '0';
            int mul = val1 * val2;
            int pos = len1 - 1 - i + len2 - 1 - j;
            int all = x + mul + ans[pos] - '0';
            ans[pos] = all % 10 + '0';
            x = all / 10;
        }
        if(x != 0)
        {
            ans[len1 - 1 - i + len2] = (char)(x + '0');
            x = 0;
        }
    }
    int i = 0;
    string ans2 = "";
    if(x != 0)
        ans2 = ans2 + (char)(x + '0');
    for(i = ans.size() - 1; i >= 0; i--)
    {
        if(ans[i] != '0')
            break;
    }
    for(; i >= 0; i--)
    {
        ans2 += ans[i];
    }
    cout << ans2 << endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章