中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么在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

浦县| 铁力市| 大关县| 中卫市| 平远县| 隆尧县| 洛扎县| 南宫市| 同仁县| 建湖县| 漯河市| 盐池县| 昌黎县| 玉田县| 长子县| 湖南省| 古丈县| 阳新县| 遂溪县| 安远县| 博罗县| 邵阳市| 大余县| 宣化县| 自贡市| 寻乌县| 乌苏市| 三门峡市| 台安县| 桃园市| 旺苍县| 博野县| 施甸县| 澜沧| 郯城县| 佛山市| 延边| 沁水县| 大冶市| 互助| 绵阳市|