C++实现大整数乘法
//大整数乘法 #include<iostream> #include<string> using namespace std; void MUL_max(string a,int la,string b,int lb,int **c);//相乘函数 void ADD_max(int * d,int **c,int la,int lb);//相加函数 char * ZhuanH(string); void main() { string a; string b; cout<<" *******************大整数乘法********************"<<endl; cout<<" (当乘数和被乘数输入值都为0时,程序结束!)"<<endl; cout<<"请输入乘数:"; cin>>a; cout<<"请输入被乘数:"; cin>>b; while(a!="0"||b!="0") { int **c=NULL; int *d=NULL; int la=0,lb=0; int i=0,j=0,k=0; la=a.length(); lb=b.length(); //分配2维C数组,存储数组a和b的乘积 c=new int*[la]; for(k=0;k<la;k++) c[k]=new int[lb+1]; //分配数组d用于存储最终结果 d=new int[la+lb+1]; for(i=0;i<la+lb+1;i++)//初始化,便于后面判断相加后的有效位数 d[i]=0; //初始化数组C,便于后面判断相加后的有效位数 for(i=0;i<la;i++) for(j=0;j<=lb;j++) c[i][j]=0; //调用函数 MUL_max(a,la,b,lb,c); ADD_max(d,c,la,lb); k=0; cout<<"相乘结果是:"<<endl; for(i=0;i<=la+lb;i++) { if(d[i]==0) k++; else break; } if(k>la+lb) cout<<0; else for(i=k;i<=la+lb;i++) cout<<d[i]; cout<<endl; cout<<"--------------------------------------------------------------"<<endl; cout<<"请输入乘数:"; cin>>a; cout<<"请输入被乘数:"; cin>>b; } } void MUL_max(string a,int la,string b,int lb,int **c) { int mid=0,i=0,j=0; int k=0; int num_a=0,num_b=0; //开始循环相乘la*lb次 for(i=la-1;i>=0;i--) { for(j=lb-1;j>=0;j--) { num_a=a[i]-48; num_b=b[j]-48;//字符转换 if((k=num_a*num_b)>=10)//判断乘积是否有进位 { if(mid!=0)//判断前一次相乘是否有进位 c[i][j+1]=k%10+mid;//取余 else c[i][j+1]=k%10; mid=k/10;//取整 } else//没有进位 { if(mid!=0)//判断前一次相乘是否有进位 c[i][j+1]=k+mid;//取余 else c[i][j+1]=k; mid=0; } } if(mid!=0) c[i][0]=k/10;//如果乘数个位和被乘数相乘,最后有进位 } } //数组相加函数 void ADD_max(int *d,int **c,int la,int lb) { int i=0,j=0; int mid=0; int num_a=0,num_b=0; int add=0,midnum=0; //将相乘得到的二维数组C各行错位相加,得到一位数组d for(i=la-1;i>=0;i--) for(j=lb;j>=0;j--) { num_a=d[i+j+1]; num_b=c[i][j]; add=num_a+num_b; if(add>=10)//判断相加是否有进位 { if(midnum==1) d[i+j+1]=add%10+1; else d[i+j+1]=add%10; midnum=1; } else { d[i+j+1]=add; midnum=0; } } if(midnum==1) d[0]=add/10; }
C++实现大整数乘法相关推荐
- 使用快速傅里叶变换计算大整数乘法-代码
在上一篇随笔"使用快速傅里叶变换计算大整数乘法"中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理.在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态 ...
- 大整数乘法c语言代码_大整数乘法
大整数乘法和我们小学学过的乘法公式一样(如下图),就是按位相乘,两个数中的每一位彼此相乘,然后将相同列的结果加起来,最后统一处理进位即可. #include <iostream> #inc ...
- 信息学奥赛一本通 1307:【例1.3】高精度乘法 | 1174:大整数乘法 | OpenJudge NOI 1.13 09:大整数乘法
[题目链接] ybt 1307:[例1.3]高精度乘法 ybt 1174:大整数乘法 OpenJudge NOI 1.13 09:大整数乘法 [题目考点] 1. 高精度 考察:高精乘高精 高精度计算讲 ...
- 信息学奥赛一本通(1174:大整数乘法)
1174:大整数乘法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 12480 通过数: 7002 [题目描述] 求两个不超过200位的非负整数的积. [ ...
- 大整数乘法--leetcode Multiply Strings
大整数乘法 本文转载自http://www.cnblogs.com/TenosDoIt/p/3735309.html 我们在日常的大整数计算中,通常是把它转化为字符型计算.这道题的思路就和我们小学计算 ...
- python两数相乘代码_Python 实现大整数乘法算法的示例代码
我们平时接触的长乘法,按位相乘,是一种时间复杂度为 O(n ^ 2) 的算法.今天,我们来介绍一种时间复杂度为 O (n ^ log 3) 的大整数乘法(log 表示以 2 为底的对数). 介绍原理 ...
- 计算机算法设计与分析 大整数乘法
大整数乘法 问题描述 求两个不超过200位的非负整数的积. 输入形式 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出形式 一行,即相乘后的结果.结果里不能有多余的前导0,即如果结 ...
- Bailian2980 大整数乘法【大数】
2980:大整数乘法 总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积. 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出 一 ...
- 大整数乘法(Karatsuba算法的字符串形式的C++实现)
#include <iostream> #include <sstream> #include <cstring> using namespace std;/函数声 ...
- 编程算法 - 大整数乘法
大整数乘法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29353263 题目: 大整数乘法, 给定两个长度不超过10000的整 ...
最新文章
- CV00-02-CV基本操作1
- 都优秀!两位硕士都发一作Nature,之后选择却截然不同!
- 【路径规划】Astart算法——图文直观解析
- SpringBoot集成websocket(java注解方式)
- finished with exit code -1073740791 (0xC0000409)解决方案
- 从程序员的角度分析微信小程序
- java web转码_web/java实现多种格式视频上传、转码、截图、播放、下载等功能附源码(详细)...
- 利用CountDownLatch实现的一个简单的线程同步场景
- geek_How-To Geek正在寻找安全作家
- 医疗保健、零售、金融、制造业……一文带你看懂大数据对工业领域的影响!...
- Nifty File Lists for Mac(文件列表创建工具)
- 更换session保存的路径
- switch c语言讲解,C语言switch使用之诡异用法详解
- 本地mysql数据库初始密码_忘记本地MySQL数据库密码的解决方法
- F5获取vs、pool、member当前、峰值、总计连接数的oid
- 导航网站完整程序源码
- 正则表达式详解及示例
- Windows查看开关机记录
- matlab仿真integrator,弹球的仿真
- MATLAB Simulink
- MathWorks 中国
- 号卡推广管理系统源码 手机卡流量卡推广网站源码 带后台版本
热门文章
- 计算机在校学校目标和措施,学校信息化建设三年发展规划
- Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同
- python报错ValueError: Found input variables with inconsistent numbers of samples: [x,y]
- 按键按动次数计数c语言,二、Windows按键消息—重复计数、OEM扫描码、扩充键旗标、内容代...
- .NET 反编译工具
- 什么是Platform SDK?
- 香港中文大学教授、麻省理工牛人林达华解说现代数学体系
- maven本地仓库设置
- 【drag】HTML5 drag API
- NeXT,NEXTSTEP,OPENSTEP,Cocoa,Cocoa Touch,GNUstep,xcode