C++中怎么实现一个大整数乘法
创作时间:
作者:
@小白创作中心
C++中怎么实现一个大整数乘法
引用
1
来源
1.
http://www.cdweb.net/article/jpcgee.html
在C++编程中,大整数乘法是一个常见的算法问题。由于标准整数类型无法处理非常大的数值,因此需要通过特殊的数据结构和算法来实现大整数的乘法运算。本文将详细介绍如何在C++中实现大整数乘法,包括算法原理和具体代码实现。
算法竞赛入门经典 这本书并没有对大数乘法实现,所以自己补充了一下,乘法的实现很简单,就是再其数据结构基础上把每宽为8位的十进制数看成多项式的系数,vector的下标看成多项式的指数,然后再对应相乘相加就可以了,注意系数超过8位 将超八位的补分进位。
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
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++){
x=0;
for(int j=max(0,str.length()-(i+1)*WIDTH);j<min((int)str.length(),i*WIDTH+WIDTH);j++)
x=x*10+str[j]-'0';
s.push_back(x);
}
return *this;
}
BigInteger operator * (const BigInteger& b) const{
int lena=s.size(),lenb=b.s.size(),lenc=lena+lenb-1;
LL *buf =new LL[lenc+1];
for(int i=0;i<=lenc;i++) buf[i]=0;
for(int i=0;i<lena;i++)
for(int j=0;j<lenb;j++)
buf[i+j]+=((LL)s[i])*((LL)b.s[j]);
for(int i=0;i<lenc;i++){
buf[i+1]+=buf[i]/BASE;
buf[i]=buf[i]%BASE;
}
BigInteger c;
c.s.resize(lenc);
for(int i=0;i<lenc;i++)
c.s[i]=buf[i];
delete[] buf;
return c;
}
void print(){
printf("%d",s.back());
for(int i=s.size()-2;i>=0;i--){
int buf=s[i],h=8;
while(buf>0){buf/=10;h--;}
for(int j=0;j<h;j++) printf("0");
printf("%d",s[i]);
}
printf("\n");
}
};
int main(){
string a,b;
cin>>a>>b;
BigInteger x,y;
x=a;y=b;
(x*y).print();
return 0;
}
关于C++中怎么实现一个大整数乘法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
热门推荐
《独孤天下》VS《独孤皇后》:曼陀形象大不同
九寨沟周边四大美景:黄龙钙池、草原、熊猫园全攻略
支气管炎患者的营养调理:燕麦菠菜齐上阵
从“肥牛卷”到“红毯女王”:范冰冰的时尚转型之路
范冰冰戛纳红毯红布造型引爆时尚圈
法国葡萄酒防伪指南:教你辨别真假
和平精英120帧画质修改器:提升流畅度,使用需谨慎
从加减乘除到图形符号:符号化思想在小学数学中的实践
划船机如何瘦肚子 ?
“三十里莜面”:从民间谚语到联合国餐桌的北方美食
冬季选油攻略:如何为爱车挑选合适的润滑油
工业革命:重塑人类社会的四大变革力量
聚会小酌不醉:低度啤酒、莫斯卡托、无醇鸡尾酒选购指南
重阳节读李商隐《九日》,感受古人深情
北京至太原自驾攻略:探访中国最早皇家园林晋祠
宝宝生日派对布置指南:从主题设定到场地布置全攻略
头痒问题别轻视:中西医结合助你摆脱瘙痒困扰
布地奈德治疗哮喘:雾化吸入用量及副作用全解析
AI赋能个性化培训,企业实践验证提升员工绩效
三七天麻丹参西洋参粉的功效与作用详解
美国交通规则全攻略:留学生安全驾驶指南
中亚传统饮品酸马奶:营养价值超牛奶,还能改善肠道健康
几何学基础概念大揭秘:从点线面到立体空间
过量饮用牛奶真会增加死亡风险?专家解读国家标准与饮用指南
张芝开山,怀素狂放,现代四家创新:草书艺术发展史
大兴机场优化交通接驳:大巴地铁调整时刻,城市航站楼服务升级
城市停车必看:标线识别、收费方式全解析
玉米秸秆发酵有机肥:既环保又增产的农业新选择
福星赐福、禄星掌运、寿星延年:解读中国福禄寿三星
年龄越大越需要:辅酶Q10的饮食补充方案