C++实现大整数乘法
2019-10-22 07:05
1166 查看
算法竞赛入门经典 这本书并没有对大数乘法实现,所以自己补充了一下,乘法的实现很简单,就是再其数据结构基础上把每宽为8位的十进制数看成多项式的系数,vector的下标看成多项式的指数,然后再对应相乘相加就可以了,注意系数超过8位 将超八位的补分进位。
我这里是笛卡尔相乘。一般来说是够用的。
但其实多项式乘法算法还有很多更高效的。
#include <iostream> #include <vector> #include <cstring> #include <cstdio> using namespace std; typedef long long LL; struct BigInteger{ static const int BASE = 100000000; static const int WIDTH = 8; vector<int> s; BigInteger operator = (const string& str){ s.clear(); int x, len=(str.length()-1)/WIDTH+1; for(int i=0;i<len;i++){ int r=str.length()-i*WIDTH; int l=max(0,r-WIDTH); sscanf(str.substr(l,r-l).c_str(),"%d",&x); s.push_back(x); } return *this; } BigInteger operator * (const BigInteger& b){ BigInteger c; int lena=this->s.size(),lenb=b.s.size(),lenc=lena+lenb-1; LL *buf =new LL[lenc+1]; for(int i=0;i<lenc+1;i++)buf[i]=0; for(int i=0;i<lena;i++) for(int j=0;j<lenb;j++){ buf[i+j]+=(this->s[i])*((LL)b.s[j]); buf[i+j+1]+=buf[i+j]/BASE; buf[i+j]=buf[i+j]%BASE; } for(int i=0;i<lenc;i++)c.s.push_back(buf[i]); if(buf[lenc])c.s.push_back(buf[lenc]); return c; } BigInteger operator * (const int& x){ char c[128]; sprintf(c,"%d",x); string str(c); BigInteger res; res=str; return *this*res; } }; ostream& operator<<(ostream& out,const BigInteger& b){ int len=b.s.size(); out<<b.s[len-1]; for(int i=len-2;i>=0;i--){ int buf=b.s[i],h=8; while(buf>0){buf/=10;h--;} for(int j=0;j<h;j++)out<<0; if(b.s[i])out<<b.s[i]; } return out; } int main() { int n;BigInteger b; b="1000000000000"; cout<< b<<endl; cout<< (b*b)*4*b*b <<endl; }
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 分治法优化大整数乘法 C++实现
- 有关C/C++语言实现大整数乘法的算法
- C++实现大整数乘法(字符串乘法)
- C++实现大整数乘法
- C语言实现大数整数乘法
- 复数乘法运算(三次实数乘法)-c++代码实现及运行实例结果
- 大整数类BIGN的设计与实现 C++高精度模板
- C++实现矩阵链乘法利用动态规划及运行实例结果
- 实现整数的乘法,减法和除法运算。只允许使用加号
- C++实现矩阵类型的基本操作:创建矩阵(M x N)、释放内存、获取某一元素的值、修改某一元素的值、乘法操作
- 求两个大整数(大于32位)的乘积的C++实现代码
- c++实现大数乘法
- C++实现输入一个整数,将各位数字反转后输出
- C++实现输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合
- scanf/cin输入若干整数以回车结束,并存储,用C/C++实现
- HDU 4002 Find the maximum(C++大整数实现+打表)
- C++中实现矩阵的加法和乘法实例
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 复数乘法运算(三次实数乘法)-c++代码实现及运行实例结果
- c++实现无限大整数的加法