溫馨提示×

溫馨提示×

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

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

C++實(shí)現(xiàn)大整數(shù)乘法(字符串乘法)

發(fā)布時(shí)間:2020-09-05 04:52:37 來源:腳本之家 閱讀:296 作者:qiuchenl 欄目:編程語言

本文實(shí)例為大家分享了C++實(shí)現(xiàn)大整數(shù)乘法的具體代碼,供大家參考,具體內(nèi)容如下

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
 
string add(string a,string b)
{
 if(a.length()==0)
 return b;
 if(b.length()==0)
 return a;
 a.length()<b.length()?a.swap(b):a.length();
 
 reverse(a.begin(),a.end());
 reverse(b.begin(),b.end());
 int flag=0;
 for(int i=0;i<a.length();i++)
 {
 int aInt=a[i]-'0';
 int bInt=0;
 if(i<b.length())
  bInt=b[i]-'0';
 int result=aInt+bInt+flag;
 a[i]=result%10+'0';
 flag=result/10;
 }
 if(flag!=0)
 {
 a=a+(char)(flag+'0');
 }
 reverse(a.begin(),a.end());
 return a;
}
string multiply(std::string strMultiplierA,char x)
{
 int b=x-'0';
 int flag=0;
 for(int i=strMultiplierA.length()-1;i>=0;i--)
 {
 int a=strMultiplierA[i]-'0';
 int result=a*b+flag;
 strMultiplierA[i]=result%10+'0';
 flag=result/10;
 }
 if(flag!=0)
 strMultiplierA=(char)(flag+'0')+strMultiplierA;
 while(strMultiplierA.length()>1&&strMultiplierA[0]=='0')
 strMultiplierA=strMultiplierA.substr(1,strMultiplierA.length());
 return strMultiplierA;
}
 
/*****************************************************************************
 Prototype  : multiply
 Description : 兩個(gè)任意長度的長整數(shù)相乘, 輸出結(jié)果
 Input Param : 
        const std::string strMultiplierA 乘數(shù)A
        const std::string strMultiplierB 乘數(shù)B
 Output    : 
        std::string strRst      乘法結(jié)果
 Return Value : 
        int            0 正確 
                     -1 異常
*****************************************************************************/
int multiply (const std::string strMultiplierA,const std::string strMultiplierB, std::string &strRst) 
{
 
  /* 在這里實(shí)現(xiàn)功能 */
  if(strMultiplierA.length()<=0||strMultiplierB.length()<=0)
 return -1;
 bool flag=false;//false"+" true"-"
 string strA=strMultiplierA,strB=strMultiplierB;
 if(strMultiplierA[0]=='-')
 {
 flag=~flag;
 strA=strMultiplierA.substr(1,strMultiplierA.length());
 }
 if(strMultiplierB[0]=='-')
 {
 flag==true?flag=false:flag=true;
 strB=strMultiplierB.substr(1,strMultiplierB.length());
 }
 
 for(int i=strB.length()-1;i>=0;i--)
 {
 string result=multiply(strA,strB[i]);
 int j=i;
 while(++j<strB.length())
  result=result+"0";
 // while(result.length()>1&&result[0]=='0')
 // result=result.substr(1,result.length());
 strRst=add(strRst,result);
 }
 while(strRst.length()>1&&strRst[0]=='0')
 strRst=strRst.substr(1,strRst.length());
 if(flag==true&&strRst!="0")
 strRst='-'+strRst;
  return 0;
}
 
int main()
{
 std::string strResult = "";
 
 multiply("-5489324", "0", strResult);
 
 cout<<strResult<<endl;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI