91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

永登县| 新丰县| 泗阳县| 建昌县| 寻乌县| 怀宁县| 穆棱市| 嘉荫县| 武山县| 林甸县| 贺州市| 大城县| 彭州市| 宁河县| 丹棱县| 布尔津县| 天长市| 梓潼县| 淳化县| 柏乡县| 界首市| 治县。| 铜梁县| 襄城县| 淮阳县| 乐业县| 益阳市| 滨海县| 双江| 梁平县| 汤原县| 阿合奇县| 彭水| 博爱县| 清水河县| 房山区| 南部县| 常州市| 和硕县| 南康市| 永福县|