C++使用string的大数乘法运算(3)

 更新时间:2019年09月18日 11:04:56   作者:好想告诉你wt  
这篇文章主要为大家详细介绍了C++使用string的大数乘法运算,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本次项目目标:使用C++完成对于大数的乘法运算,供大家参考,具体内容如下

项目要点

1.大数指的是远超long long int的数据

2.将大数用矩阵进行存储,并通过矩阵实现运算

3.本人采用字符串进行存储,应注意char的特点

比如:char a=161;

cout<<(int)a;

此时会输出-95,而不是161,char类型首个比特位是作为正负号的

乘法,此处为整数乘法,正整数,负整数,0均可,主要思想就是乘法的笔算方法

运行截图及代码如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define n 10
string dezero(string a)//用来去掉正数前面的0,也就是说可以输入000001类似这样的数字
{
 long int i;
 for(i=0;i<a.length();i++)
 {
 if(a.at(i)>48) break;
 }
 if(i==a.length()) return "0";
 a.erase(0,i);
 return a;
}
string multiply(string a,string b)//整数
{
 long int i,j,k,yao=0,kai;
 string c1,c2;
 string c3=a+b;
 if(a.at(0)=='-')
 {
 a.erase(0,1);
 yao++;
 }
 if(b.at(0)=='-')
 {
 b.erase(0,1);
 yao++;
 }
 a=dezero(a);
 b=dezero(b);
 if(a.at(0)==48||b.at(0)==48) return "0";
 if(a.length()>b.length())
 {
 c1=a;
 c2=b;
 }
 else
 {
 c1=b;
 c2=a;
 }
 reverse(c1.begin(),c1.end());
 reverse(c2.begin(),c2.end());
 for(i=0;i<c2.length();i++)
 {
 if(c2.at(i)>=48&&c2.at(i)<=57) c2.at(i)-=48;
 if(c2.at(i)>=97&&c2.at(i)<=122) c2.at(i)-=87;
 }
 for(i=0;i<c1.length();i++)
 {
 if(c1.at(i)>=48&&c1.at(i)<=57) c1.at(i)-=48;
 if(c1.at(i)>=97&&c1.at(i)<=122) c1.at(i)-=87;
 }
 for(i=0;i<c3.length();i++) c3.at(i)=0;
 for(i=0;i<c2.length();i++)
 {
 for(j=0;j<c1.length();j++)
 {
 kai=c2.at(i)*c1.at(j);
 c3.at(i+j+1)+=kai/n;
 c3.at(i+j)+=kai%n;
 for(k=i+j;k<c3.length()-1;k++)
 {
 if(c3.at(k)>=n) 
 {
  c3.at(k+1)+=c3.at(k)/n;
  c3.at(k)=c3.at(k)%n;
 }
 else
 {
  break;
 }
 }
 }
 }
 for(i=c3.length()-1;i>=0;i--)
 {
 if(c3.at(i)>0) break;
 }
 c3.erase(i+1,c3.length());
 for(i=0;i<c3.length();i++)
 {
 if(c3.at(i)>=10) c3.at(i)+=87;
 if(c3.at(i)<10) c3.at(i)+=48;
 }
 reverse(c3.begin(),c3.end());
 if(yao==1) c3="-"+c3;
 return c3;
}
int main()
{
 string a,b;
 while(cout<<"input:"&&cin>>a>>b)
 {
 cout<<"output:"<<multiply(a,b)<<endl;
 }
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Opencv实现读取摄像头和视频数据

    Opencv实现读取摄像头和视频数据

    这篇文章主要为大家详细介绍了Opencv实现读取摄像头和视频数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • makefile如何调用静态库的方法实现

    makefile如何调用静态库的方法实现

    这篇文章主要介绍了makefile如何调用静态库的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C++实现两个有序数组的合并

    C++实现两个有序数组的合并

    这篇文章主要为大家详细介绍了C++实现两个有序数组的合并,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++数据结构之实现邻接表

    C++数据结构之实现邻接表

    这篇文章主要为大家详细介绍了C++数据结构之实现邻接表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++ STL库应用汇总

    C++ STL库应用汇总

    在本篇文章里小编给大家整理的是关于C++ STL库应用集合,有需要的朋友们可以参考下。
    2020-03-03
  • C++未定义行为(undefined behavior)

    C++未定义行为(undefined behavior)

    对于未定义行为,C++标准没有明确规定编译器们应该怎么做,那么执行的结果就是不可预料的。下面我们来详细探讨下
    2017-02-02
  • C语言选择排序算法及实例代码

    C语言选择排序算法及实例代码

    本篇文章主要介绍了 C语言选择排序算法,这里提供代码实例以便大家理解,通过本文,更好的理解排序算法
    2016-07-07
  • 深入理解void以及void指针的含义

    深入理解void以及void指针的含义

    本篇文章对小编void以及void指针的含义进行了详细的分析和介绍。需要的朋友参考下
    2013-05-05
  • c++ 调用python传输图片实例

    c++ 调用python传输图片实例

    今天小编就为大家分享一篇c++ 调用python传输图片实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C++利用多态实现职工管理系统(项目开发)

    C++利用多态实现职工管理系统(项目开发)

    这篇文章主要介绍了C++利用多态实现职工管理系统(项目开发),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论