在标准C++中,int类型可表示数的范围是-2^31~2^31-1。而在实际运算中,可能用到的数可能会远远超出int或long类型的范围。而此时如果继续用int或long的话必然会出现错误。此时就需要我们用到“大数”这个概念。通过string和vector为载体来进行运算,因为字符串或容器没有长度的限制。具体代码如下:

using namespace std;
#include<iostream>
#include<string>
#include<vector>void function()
{int i,j,k;int numlen1,numlen2,tmpdata;vector<int>num1,num2,num3;string numtmp1,numtmp2;cout<<"Please Enter num1:";                 /*将需要相乘的两个数输入到字符串中*/cin>>numtmp1;cout<<"Please Enter num2:";cin>>numtmp2;numlen1=numtmp1.length();                   /*分别得到两个字符串的长度,即两个数的位数*/numlen2=numtmp2.length();for(i=0;i<numlen1;i++){    num1.push_back(numtmp1[i]-'0');         /*将每一位的字符转化为数字存储到容器中*/}for(j=0;j<numlen2;j++){    num2.push_back(numtmp2[j]-'0');}for(i=numlen1-1;i>=0;i--)             /*num2的最低位依次与num1的每一位相乘,不考虑进位*/{                                     /*最低位不与其他位放在一起运算,后面小结会有说明*/      j=numlen2-1;tmpdata=num1[i]*num2[j];num3.push_back(tmpdata);                /*将运算得到的数按位存储到新的容器num3中*/}for(j=numlen2-2;j>=0;j--)                 /*从num2的倒数第二位开始再与num1的每一位相乘*/{k=numlen2-1-j;                          /*用k来限制得到的结果存储在第几位*/num3.push_back(0);                      /*每次运算都要在容器后新加一个元素作为进位*/for(i=numlen1-1;i>=0;i--){num3[k]=num1[i]*num2[j]+num3[k];    /*相乘后加上当前位原有的值即为当前位的值*/k++;}}for(k=0;k<num3.size();k++)                  /*所有位都运算完成后统一进位*/{if(num3[k]>=10){tmpdata=num3[k]/10;num3[k+1]+=tmpdata;num3[k]=num3[k]%10;}}cout<<"-------After Calculating--------"<<endl;cout<<"num1*num2=";for(i=num3.size()-1;i>=0;i--)                /*在num3中存的数是倒叙排列,需要反着输出*/{cout<<num3[i];}
}int main()
{function();return 0;
}

运行结果:

小结:

类似于小学乘法中列的竖式。将num1写在上面,num2写在下面。从num2的最后一位开始,每一位依次与num1的每一位相乘。上面的代码中,并没有将最低位与其他位一起运算。其原因是,每一次运算需要加这个位上原有的值,才可以得到当前位的值。而第一次运算容器是空的,没有初始的值,所以无法与其他位放在一起。第一次运算过后,每一位上都有了值,便可以加了。在竖式中我们都知道,每一次相乘都要向左移一位,意为乘10。而这里也需要考虑到这个问题。而每次向左移一位都会出现新的进位,所以每次都需要在容器尾新加一个元素,并赋初值为0,与新进的位相加。由于num3中存储的数是倒着排的,在显示的时候需要我们逆序输出。

C++:关于大数相乘的解决方法(C++实现)相关推荐

  1. C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...

    华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘) 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出 ...

  2. javascript乘法和加法_JavaScript大数相加相乘的实现方法实例

    前言 JavaScript 中的最大安全整数是 2 ^{53} – 1 ,即 9007199254740991,当我们进行超出这个范围的数值计算的时候就无法得到精确的值,而是一个近似值,比如我们计算 ...

  3. PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法

    PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法 参考文章: (1)PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法 (2)https://www. ...

  4. c语言中大数相乘的方法,C++实现大数相乘算法

    本文实例为大家分享了C++实现大数相乘的具体代码,供大家参考,具体内容如下 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘 ...

  5. 大数相乘(数组表示)

    大数相乘 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到 ...

  6. 历届试题 矩阵翻硬币 蓝桥杯 大数开方 大数相乘

    历届试题 矩阵翻硬币   时间限制:1.0s   内存限制:256.0MB 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬 ...

  7. 超大数相乘的java代码,java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 用java搞了一个版本 这里说一下思路 将数字已字符串形式接收,转换成int[]整型数组,然后num1[],num2[]依次 ...

  8. 大数相乘(C语言,分治算法)

    问题: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算.大数运算主要有加.减.乘三种方法. 下面就 ...

  9. win10 调用计算机,Win10系统打开此电脑提示正在处理它解决方法

    相信绝大数的用户,在使用系统的过程中难免会遇到各种疑难杂症,就在近期有一网友遇到一个奇怪的Win10系统故障,双击打开"此电脑"或者打开某个系统分区(C盘或D盘)或者打开某个文件夹 ...

最新文章

  1. 最大的ai计算机模型,Microsoft构建了世界排名前五的超级计算机,用于在Azure上训练大型AI模型...
  2. UML中的stereotype
  3. python scrapy 环境搭建_python+scrapy环境搭建步骤描述
  4. cognos 样例 oracle,Cognos10安装和sample配置(ORACLE学样例)
  5. 星尘小组第八周翻译-数据页和数据行
  6. 2008R2Win7管理二十六ADRMS客户端使用及侦错
  7. 客户要求ASP.NET Core API返回特定格式,怎么办?(续2)
  8. 实例64:python
  9. 正则 (?i,m,s,x,g)
  10. 构造一个简单的神经网络,以DQN方式实现小游戏的自动控制
  11. 十字链表实现矩阵存储
  12. DTU的工作原理是什么?DTU是怎样工作的?
  13. 【数据结构】选择排序
  14. 狄利克雷分布公式_Dirichlet Tree Distribution(狄利克雷树分布)
  15. 发票管理系统java_企业发票管理系统.doc
  16. python改变图像颜色_通过python改变图片特定区域的颜色详解
  17. W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
  18. springboot房屋租赁管理系统的设计与实现
  19. 在计算机刚出现时如何解决问题,当grub出现在计算机上时,如何解决该问题?启动计算机后出现grub时该怎么办?...
  20. 使用微软自带输入法输入英文之间间距突然变大

热门文章

  1. R语言可视化——ggplot2画回归曲线
  2. 用WeRoBot和Python编写一个不使用网页版微信且能够回复消息微信群聊机器人
  3. 人工智能98%都认错,图像识别AI遇上对抗性图像竟变“瞎子”!
  4. 全域旅游景区导览系统v1.0.20旅游线路 旅游商城 活动报名
  5. golang使用http发送graphql请求
  6. 【Gin-v1.9.0源码阅读】version.go
  7. 生物医药实验室安全知识202203第九次作业答案(2022.11.11)
  8. 使用MySQL或Java对查询结果中的手机号、身份证号等进行脱敏处理
  9. 【vue】用WOW.js+animate.css实现页面滚动加载元素动画
  10. B1043 输出PATest (散列)