日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++?高精度乘法運算的實現_C 語言

作者:CairBin ? 更新時間: 2023-03-03 編程語言

思想

首先確定乘積的位數。

假設兩個非負整數a和b,n1為a的長度(位數),n2為b的位數,記n為c=a*b的位數,則有:

計算兩個乘數每位數字的乘積,其中a[i]乘b[j]累加到c[i+j]上去

在最后對累加結果數組c作一次性進位(判斷是否大于等于10)

代碼

知道上述原理,很容易就寫出代碼

#include <iostream>
#include <string>
#include <algorithm>
#include <string.h>

using namespace std;
int main()
{
? ? //輸入時處理,包含置0、逆置、轉換成真實數字等步驟
? ? string s;
? ? cin >> s;
? ? int n1 = s.length();?? ?//長度
? ? char str1[10];
? ? memset(str1, 0, sizeof(str1));
? ? for (int i = 0; i < n1;i++)
? ? ? ? str1[i] = s[n1 - i - 1]-'0';
? ??
? ? string s2;
? ? cin >> s2;
? ? int n2 = s2.length();
? ? char str2[10];
? ? memset(str2, 0, sizeof(str2));
? ? for (int i = 0; i < n2;i++)
? ? ? ? str2[i] = s2[n2 - i - 1]-'0';


? ? char res[20];
? ? memset(res, 0, sizeof(res));

? ? //核心代碼
? ? int i, j;
? ? for (i = 0; i < n1;i++)
? ? ? ? for (j = 0; j < n2;j++)
? ? ? ? ? ? res[i + j] += str1[i] * str2[j];

? ? for (i = 0; i < n1 + n2;i++)
? ? {
? ? ? ? if(res[i]>=10)
? ? ? ? {
? ? ? ? ? ? res[i + 1] += res[i] / 10;
? ? ? ? ? ? res[i] %= 10;
? ? ? ? }

? ? }

? ? //從不為0的那一位開始輸出(刪除前導0),如果全部為0,則輸出0
? ? int k;
? ? for (k = n1 + n2 - 1; !res[k]&&k>0; k--)
? ? ? ? ; ? //注意這個分號

? ? for (int i = k; i >= 0; i--)
? ? ? ? cout << int(res[i]);
? ? cout << endl;


? ? return 0;
}

原文鏈接:https://blog.csdn.net/qq_42759112/article/details/128635218

欄目分類
最近更新