[Nowcoder] 大整数相乘(拼多多笔试题)
生活随笔
收集整理的這篇文章主要介紹了
[Nowcoder] 大整数相乘(拼多多笔试题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有兩個用字符串表示的非常大的大整數,算出他們的乘積,也是用字符串表示。不能用系統自帶的大整數類型。?
輸入描述:
空格分隔的兩個字符串,代表輸入的兩個大整數輸出描述:
輸入的乘積,用字符串表示輸入例子1:
72106547548473106236 982161082972751393輸出例子1:
70820244829634538040848656466105986748大數乘法問題
簡單來說就是把A[i]*B[j]累加放到臨時數組的C[i+j]位置。
然后對數組C執行進位加法即可。
剩下的步驟就是字符與數字之間的轉換與逆序問題。
參考代碼如下:
#include <iostream> #include <string> #include <vector> using namespace std;int main() {string str1, str2;while (cin >> str1 >> str2){int n1 = str1.size(), n2 = str2.size();vector<int> v1, v2;// 將兩個字符串放入數組中并逆序for (int i = n1 - 1; i >= 0; --i){v1.push_back(str1[i] - '0');}for (int i = n2 - 1; i >= 0; --i){v2.push_back(str2[i] - '0');}// 待處理的臨時數組vector<int> v(n1 + n2, 0);for (int i = 0; i < n1; ++i){for (int j = 0; j < n2; ++j){v[i + j] += v1[i] * v2[j];}}// 處理數組中的加法進位for (int i = 0; i < n1 + n2-1; ++i){v[i + 1] += (v[i] / 10);v[i] = v[i] % 10;}string res;// 判斷最終結果的有效位數int m = n1 + n2 - 1;if (v[n1 + n2 - 1] == 0)m = n1 + n2 - 2;// 將結果轉換為字符串for (int i = m; i >= 0; --i){res += (v[i] + '0');}cout << res << endl;}return 0; }?
轉載于:https://www.cnblogs.com/immjc/p/9420387.html
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的[Nowcoder] 大整数相乘(拼多多笔试题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式-结构型模式-装饰模式
- 下一篇: Gitlab自动触发Jenkins构建项