亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C++中實現一個大數相乘算法

發布時間:2021-05-16 12:35:41 來源:億速云 閱讀:213 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關怎么在C++中實現一個大數相乘算法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

普通的乘法計算用int、long、double都可以解決,但有時候需要處理的數字過大,從而產生溢出,以下是實現任意長度的正整數A*B的算法,即大數相乘,這個算法比較簡單易懂,思路如下:

1、在主函數用char型數組a和b分別保存輸入的數字A和B;

2、對字符串數組a和b每一位互相相乘,像小學時候學的豎式乘法,結果保存在字符串數組s,但是不進行進位處理;
3、對字符串數組s每一位進行進位處理;

4、將字符串數組s賦給char型數組c,返回結果。

char版本:

//大數相乘,實現大數A*B
char* getMultiplyValue(char a[],char b[]) //參數a:char型數組a的數組名;參數b:char型數組b的數組名;
{
 int i,j,ca,cb,*s,cs;
 char *c;
 
 ca=strlen(a); //求字符串數組a的長度
 cb=strlen(b); //求字符串數組b的長度
 cs=ca+cb;  
 s=new int[cs];
 c=new char[cs];
 
 //初始化
 for(i=0;i<cs;i++)
 s[i]=0;
 
 //直接縱向求和,不處理進位
 for(i=0;i<ca;i++)
 for(j=0;j<cb;j++)
 s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); //因為s[0]用來后面保存最高位進位,所以從s[1]開始
 
 //對求和后的數處理進位
 for(i=cs-1;i>=0;i--)
 if(s[i]>=10)
 {
 s[i-1]+=s[i]/10;
 s[i]%=10;
 }
 
 //如果最高位沒有進位,則舍棄開頭0
 i=0;
 while(s[i]==0)
 i++;
 
 //保存結果到字符串
 for(j=0;i<cs;i++,j++)
 c[j]=s[i]+'0';
 c[j]='\0'; 
 
 return c;
 
}

另外,附上string版本的,

#include <string>
using namespace std;
 
//大數相乘,實現大數A*B
string getMultiplyValue(string a,string b) //參數a:string型a的變量名;參數b:string型b的變量名;
{
 int i,j,ca,cb,cs,*s;
 string sum;
 
 ca=a.length(); //求字符串a的長度
 cb=b.length(); //求字符串b的長度
 s=new int[cs=ca+cb];
 
 
 //初始化
 for(i=0;i<cs;i++)
 s[i]=0;
 
 //直接縱向求和,不處理進位
 for(i=0;i<ca;i++)
 for(j=0;j<cb;j++)
 s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); //因為s[0]用來后面保存最高位進位,所以從s[1]開始
 
 //對求和后的數處理進位
 for(i=cs-1;i>=0;i--)
 if(s[i]>=10)
 {
 s[i-1]+=s[i]/10;
 s[i]%=10;
 }
 
 //如果最高位沒有進位,則舍棄開頭0
 i=0;
 while(s[i]==0)
 i++;
 
 //保存結果到字符串
 for(j=0;i<cs;i++,j++)
 sum+=s[i]+'0';
 
 return sum;
 
}

下面給出的是char版本的運行實例(string版本同理),更徹底教會大家如何使用,

#include <iostream>
using namespace std;
int main()
{
 char a[255],b[255];
 
 cin>>a>>b;     //輸入數字a,b
 
 cout<<getMultiplyValue(a,b)<<endl; //輸出a*b
 
 return 0;
}

上述就是小編為大家分享的怎么在C++中實現一個大數相乘算法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

西乌| 襄汾县| 特克斯县| 抚远县| 莒南县| 林州市| 商城县| 和政县| 永兴县| 桐梓县| 道孚县| 肥东县| 海安县| 绥德县| 哈尔滨市| 融水| 桦南县| 台中市| 桐乡市| 卢氏县| 清水县| 杭锦后旗| 大冶市| 楚雄市| 社会| 乌拉特中旗| 景宁| 兰溪市| 长乐市| 黑山县| 福鼎市| 衢州市| 平谷区| 涡阳县| 临桂县| 化州市| 汨罗市| 舟山市| 彰化县| 漳州市| 盐津县|