大数加法,乘法

        在平时做题的时候,我们有时会遇到一些数据范围非常大的题,一般已经超过long long类型存储的范围。这个时候我们就需要用到字符串来实现这种大数据的运算。

下面提供由c++实现的大数加法和乘法。

大数加法

string add(string a,string b){

  string s;
  int len1,len2;
  len1=a.size()-1;
  len2=b.size()-1;
  int flag=0;
  while(len1>-1&&len2>-1){
        int sum=flag+(a[len1--]-'0')+(b[len2--]-'0');
        s+=char((sum)%10+'0');
        flag=sum/10;
  }
  while(len1>-1){
       int sum=flag+(a[len1--]-'0');
       s+=char((sum)%10+'0');
       flag=sum/10;
  }
   while(len2>-1){
       int sum=flag+(b[len2--]-'0');
       s+=char((sum)%10+'0');
       flag=sum/10;
           }
   if(flag)
    s+=char('0'+flag);
   int len=s.size()-1;
   while(len>-1){
      if(s[len]!='0')
         break;
      s=s.substr(0,s.size()-1);
       len--;
   }
   for(int i=0;i<s.size()/2;i++){
       char c=s[i];
       s[i]=s[s.size()-i-1];
       s[s.size()-i-1]=c;
   }
   if(s.size()==0)
    s+='0';
   return s;

}

大数乘法

string mul(string a,string b){

  string s;
  int len1,len2;
  len1=a.size();
  len2=b.size();
  for(int i=0;i<len2;i++){
       int num=b[len2-i-1]-'0';
       int len=len1-1;
       int flag=0;
       string temp="";
       while(len>-1){
          int sum=flag+(a[len--]-'0')*num;
          temp+=char((sum)%10+'0');
          flag=sum/10;
       }
       if(flag)
        temp+=char('0'+flag);
       len=temp.size();
       for(int j=0;j<len/2;j++){
          char c=temp[j];
          temp[j]=temp[len-j-1];
          temp[len-j-1]=c;
       }
  for(int j=0;j<i;j++)
           temp+='0';
          s=add(s,temp);
  }
  return s;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值