日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言,两个超大整型数乘法

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言,两个超大整型数乘法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??對于整形依次為int, long int, long long int。表示范圍如下:

類型字節數表示范圍
int4-2147483648~+2147483647
long int4-2147483648~2147483647
long long int16-9223372036854775808~+9223372036854775807

??但有的情況使用long long int 也無法表示,這個時候要使用數組的表示形式。整體的計算方法與手工計算順序一致,數A的每一位與數B相乘再相加(注意數A的每一位要記得乘以10),做加法的時候要處理好進位的關系。
??源代碼如下:

#include<iostream> #include<iomanip> #include<vector> #include<string> #include<fstream> using namespace std;void bigNumMul(long int x,long int y) {int a[64] = {0};int b[64] = {0};int c[64] = {0};long t;if(x<y) // 保證x是大的那一個 {t = x;x = y;y = t; } long m = x;int a_num = 0;//把x每位數分別存入數組for(int i=0; i<64; i++){a[i] = m%10;a_num++;m = m / 10;if(m == 0)break;}long n = y;int b_num = 0;//把y每位數分別存入數組for(int i=0; i<64; i++){b[i] = n%10;b_num++;n = n/10;if(n == 0)break;}//中間數的存放位為num+1const int _a_num=a_num+1;vector<int>mid_val; // 最好使用vector, 靜態整形數組還是有長度限制,空間可能會爆 for(int i=0;i<_a_num;i++){mid_val.push_back(0);}// 乘法操作 for(int i=0; i<b_num; i++){ int backAdd = 0;//backAdd為乘積的進位數// 一位乘一行 for(int j=0; j<=a_num; j++){int product = a[j]*b[i];//兩個位數乘積int sum = product + backAdd;mid_val[j] = sum%10;backAdd=sum/10;}// 一行加一行 backAdd = 0;//一行積的一位與另一行積的一位相加的進位數for(int k=i; k<=i+a_num; k++) // 從i開始是為了符合,乘法每高位依次向左移 {int sum = c[k] + mid_val[k-i] + backAdd;c[k] = sum % 10;backAdd = sum / 10;}}// 放入是是倒敘放入,查找的時候也需要倒著 int startBit=0;for(int i=63;i>=0;i--){if(c[i]!=0){startBit=i;break;}}for(int i=startBit;i>=0;i--){cout<<c[i];} }int main(void) {bigNumMul(2147483647,2147483647);return 0; }

參考博客:

https://blog.csdn.net/tsinfeng/article/details/5939395

https://blog.csdn.net/xcrazyu/article/details/87879103

總結

以上是生活随笔為你收集整理的C语言,两个超大整型数乘法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。