管理培训搜索
18318889481

IT
| 网络安全管理师

信息安全工程 网络蠕虫

| 系统集成项目管理工程师

每日一练 报名考试 考试大纲 知识考点 综合知识 直播动态 考试用书 政策法规 系统集成产学研实践 资质认定

| 金融科技师

职业前景 CGFT专题 政策动态

| 网络工程师

考试动态 每日一练 学习笔录 技术考点 知识考点 直播动态 考试用书 技术与应用 网络工程 网络技术入门 考试大纲

| 计算机学苑

数字媒体艺术 计算机科学与技术 软考报名 信息处理技术员 行业资讯 考试大纲 直播动态 网络安全 网络管理 通信技术 OpenHarmony 计算机与网络 企业信息化 软件工程 Linux 嵌入式Linux开发基础(ARMAtom) 离散数学 操作系统 C++程序设计 Java 语言程序设计 智能感知与无人系统 机器学习算法与人工智能 Python 软考资讯

| 计算机应用水平考试

考试动态 报考指南 全国计算机应用水平考试 中国计算机等级考试 江西计算机等级考试 广东计算机等级考试 江苏计算机等级考试 贵州计算机等级考试 湖南计算机等级考试 福建计算机等级考试 河南计算机等级考试 广西计算机等级考试 山西计算机等级考试 吉林计算机等级考试 江苏计算机等级考试 湖北计算机等级考试 北京计算机等级考试 安徽计算机等级考试 宁夏计算机等级考试 浙江计算机等级考试 陕西计算机等级考试 湖北计算机等级考试 河北计算机等级考试 天津计算机等级考试

| 电子商务平台

互联网营销师 电子商务师 农村电商

| 计算机技术与软件专业技术资格(水平)考试
| 信息系统项目管理师

学习笔记 考试动态 直播动态 考试用书 考试大纲 信息系统项目管理

| 信息系统监理师

IT实务 直播预告 信息系统监理师综合 答疑QA 监理资质

| 信息处理技术员

考试动态 直播动态 考试用书 知识分享 技术百科

| 一种C++中大数乘法程序当前您所在的位置:首页 > IT > 计算机学苑 > C++程序设计

摘要:程序模拟了两数相乘的人工竖式算法,利用C++标准模板库中string 类接收键盘输入的大数,并用标准模板库vector类存储大数和相乘,解决了基本数据类型表示大数位数有限的问题。

关键词:C++;大数;string;vector

0 引言

随着科技的发展,计算机系统的性能越来越高,给人们的工作和生活带来了便利。虽然是如此,但计算机所能表示的数据范围还是有限制的。C++中long long的最大值[1]:9223372036854775807,long long的最小值:-9223372036854 775808;unsigned long long 的最大值:18446744073709 551615;大数超出了计算机系统基本数据类型所能表达的范围,例如有的数据可能有成百上千位,如果这样的数据相乘就超出了基本数据类型所能表达的范围。本文探讨了一种利用C++程序编写两个大整数相乘的算法,希望起到抛砖引玉的效果。

1 乘法原理

首先看看两数相乘的算法[2],模拟人工计算时的方法,也就是列竖式相乘,从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加,得出最后结果。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。

我们以135*47为例来说明计算过程:

⑴ 先算135*7,7*5 得到35 个1,7*3 得到21 个10,7*1得到7个100,如表1是存储结果的数组形式。

表1 135*7的结果

⑵接下来算135*4,4*5得到20个10,4*3得到12个100,4*1得到4个1000,如表2。

表2 135*4的结果

⑶乘法过程完毕。接下来从a[0]开始向高位逐位处理进位问题。a[0]留下5,把3 加到a[1]上,a[1]变为44 后,应留下4,把4 加到a[2]上……最终使得a里的每个元素都是1 位数,结果就算出来了,是6345。如表3。

表3 135*47最终结果

2 string和vector

大数的位数超出了基本数据类型的表示范围,因此不能够用基本数据类型来表示。string 是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string[3]操作,也可以通过文件等手段进行string 操作。同时,C++的算法库对string 类也有着很好的支持,并且string 类还和c 语言的字符串之间有着良好的接口。其[ ]操作符支持对字符的读写。利用string 来接受键盘输入的任意位数的字符串,这就满足了大数的任意多位的要求,string默认存储的是字符串,故需要减去‘0’才能得到真实的数值。

Vector[4]是同一种类型的对象集合,能够容纳许多其他类型相同的元素,因此又被称为容器。与string相同vector 同属于STL(Standard Template Library,标准模板库)中的一种自定义的数据类型,可以广义上认为是数组的增强版。在使用它时,需要包含头文件vector,#include<vector>,vector容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外,vector 也提供了许多的方法来对自身进行操作。如push_back[5]操作,vector尾部加入一个数据;reserve()操作则告诉vector容器应该预留多少个元素的存储空间。vector 在容量不足时会足倍的增加容量。insert()[6] 函数有以下三种用法:iterator insert(iterator loc,const TYPE &val),在指定位置loc 前插入值为val 的元素,返回指向这个元素的迭代器;void insert(iterator loc,size_type num,const TYPE &val),在指定位置loc前插入num 个值为val的元素;void insert(iterator loc,input_iterator start,input_iterator end),在指定位置loc 前插入区间[start,end)的所有元素。

3 程序

下面是程序的一些清单:在程序的开始的地方,嵌入头文件。

3.1 是程序的输入存储

3.2 两个大数相乘程序

3.3 输出显示程序

此程序在Windows10 下,VC++2010 调试成功。如图1所示。

图1

4 结束语

本文程序利用string 字符串来接收键盘输入的大数,然后把所接收的字符串每一位存储到vector 数组中,按照两数相乘的竖式计算规则进行计算。这期间要用到vector的一些方法。此程序并没有检测输入数据的合法性,如果加入这些,程序将会更加完善。

参考文献(References):

[1]郭炜.新标准C++程序设计教程[M].清华大学出版社,2012

[2]廖作斌.一种利用C++实现大数相乘的算法分析与设计[J].科技通报,2012(6)

[3] Stephen Prata.C++Primer Plus 中文版(第六版)[M].北京:人民邮电出版社,2012

[4] Stanley B.Lippman,Josee Lajoie,Barbara E.Moo.C++Primer中文版(第四版)[M].北京:人民邮电出版社,2006

[5]Bjarne Stroustrup C++程序设计语言(特别版)[M].北京:机械工业出版社,2009

[6]郑莉,董渊.C++语言程序设计(第四版)[M].北京:清华大学出版社,2010


课程
财会类
税务类
金融类
经管类
认证类
学历类
建工类
健康类
专家
政府专家
财税名家
高校教授
文化传媒
金融科技
金融电子化
企业管理
财政金融
生物医药
诺贝尔奖得主
合规法律
科学技术
银行智库
财会
中国注册会计师
AIA
会计实务
财务经理人
初级会计师
税务实务
中级会计师
中国会计智库
CFO成长营
会计学苑
建工
二级造价工程师
建筑工程资讯
二级建造师
一级造价工程师
监理工程师
消防设施操作员
产教融合
建工学苑
一级建造师
安全工程师
消防工程师
造价工程事务所
BIM工程师
经管
转创人力
中级经济师
二级人力资源管理师
三级人力资源师
人力资源管理师
碳排放管理师
期刊中心
教材参考
军队文职人员
产教融合
劳动关系协调员
初、中级经济考试
企业合规师
初级经济师
企业人力资源管理师
职业指导师
教育
英语学习考试
专升本
成人高等教育
自考中国
自学考试研究所
普通专升本
小自考中心
高等继续教育学院
中外教育
智库与社会服务
高等职业本科
金融
证券从业
基金从业
金融智库
银行从业
转创博学
ICCM
项目
高管培训
国际学历
财经证书
专项课程
企业内训
教育技术产品
高校学科建设服务
教学资源开发
国际合作服务
产业服务
国内院校
海外院校
海外留学
合作院校
观点
政治经济
IT&财务融合
高校教授
文化传媒
金融科技
金融电子化
企业管理
财政金融
生物医药
诺贝尔奖
合规法律
科学技术
银行智库
商业产经
医卫
医卫健康
主管药师
保育员
药卫学苑
心理咨询师
家庭照护员
养老护理员
健康管理师
公共营养师
执业药师
育婴师(员)
主管护师
护士执业
医院招聘
IT
网络安全管理师
系统集成项目管理工程师
金融科技师
网络工程师
计算机学苑
计算机应用水平考试
电子商务平台
计算机技术与软件专业技术资格(水平)考试
信息系统项目管理师
信息系统监理师
信息处理技术员
考研
考研资讯
信息中心
专业硕士
考研公共课
同等学力申硕中心
复试调剂
研究生工作
考研中国
硕士入学考试
考研直播动态
教师
高中教师
考试动态
直播动态
考试报名
教育智库
幼儿教师
小学教师
初中教师
教师中国
教师招聘
中小学教师资格考试
普通话测试
教师企业
校长领导力
社工
社会工作者
技能中国
智库与社会服务
初级社会工作者
中级社会工作者
报考动态
社会工作事务所
职称评审
家庭教育指导师
转创网校APP
18318889481
在线QQ
在线留言
返回首页
返回顶部
留言板
发送