c++高精度乘法(有超详细模拟样例)

本代码主要用于一个大数乘以一个小数

本代码不支持两个大数相乘

跟高精度加法和高精度减法有所不同 ,高精度乘法只有一个大数字a,b是小数字,可以直接输入,不用开辟新数组

本代码中,t依旧是代表进位

请同时结合代码体会下面的讲解,不然是看不懂的

我们接下来以 19*14 = 266 举例讲解

1 第一步

首先t=0;

sum[0]=(9*14+0)%10 = 6

t = (9*14+0)/10 =12

2 第二步

此时t = 12

sum[1] = (1*14+12)%10 = 6

t = (1*14+12)/10 = 2

3 第三步

此时已经跳出循环,但是t并不等于零,说明还有进位,所以我们将t补到最后一位

//高精度乘法模板函数
void mul(v &a,  int &b){
  
   int  t = 0; //t在这作为进位
   
   for(int i=0;i<a.size();i++){
       //只留下个位数作为本位数字,其余都要进位上去
      sum.push_back((a[i]*b+t)%10);   
      t = (a[i]*b+t)/10;  //新的进位要把原先的进位也算上
   }
   if(t)sum.push_back(t);  //如果最后还有进位,把最后一位也算上
   
}
#include
#include
#include
#include
#include

using namespace std;
typedef vector<int > v;

string s1;//读入的数字字符串

vector<int >sum; //保存最后答案
vector<int >a;//两个乘数
int b; //存储第二个数字

void mul(v &a,  int &b){
  
   int  t = 0; //t在这作为进位
   
   for(int i=0;i<a.size();i++){
       //只留下个位数作为本位数字,其余都要进位上去
      sum.push_back((a[i]*b+t)%10);   
      t = (a[i]*b+t)/10;  //新的进位要把原先的进位也算上
   }
   if(t)sum.push_back(t);  //如果最后还有进位,把最后一位也算上
   
}

int main(){
    
    cin>>s1>>b;
 
    for(int i=s1.size()-1;i>=0;i--)a.push_back(s1[i]-'0');

       if(a.back()==0||b==0)cout<<0;
       else{
           mul(a, b);
          for(int i=sum.size()-1;i>=0;i--)cout<<sum[i];
          
       }
        return 0;
    
}

你可能感兴趣的:(c++,#高精度,c++,算法,开发语言)