【分治算法】大整数乘法
来源:互联网 发布:郭艾伦奥运会数据 编辑:程序博客网 时间:2024/06/18 11:00
大整数的乘法 在计算机中,长整形(long int)变量的范围是-2147483648能超过10位数。即便用双精度(double)变量,也仅能保证16位有效数字的精度。在某些需要更高精度的乘法运算场合,需要用别的办法来实现运算。 比较容易想到的是做多位数乘法时列竖式进行计算的方法,只要写出模拟这一过程的程序,就能实现任意大整数的乘法运算。经过查阅资料,找到一种更易于编程的方法,即“列表法”。
下面先介绍“列表法”:
例如当计算8765*234时,把乘数和被乘数照如下列出,见表1:
源代码:
#include<iostream>#include<string>using namespace std;int main(){ string a; string b; cin>>a>>b; int lena=a.size(); int lenb=b.size(); int* tmp=new int[lena+lenb]; for(int y=0;y<lena+lenb;y++) { tmp[y]=0; } int* C=new int[lena+lenb]; for(int i=0;i<lenb;i++) { for(int j=0;j<lena;j++) { tmp[j+i]=tmp[j+i]+(int(b[i])-48)*(int(a[j])-48); } } int ii=0; for(int k=lena+lenb-2;k>=0;k--) { if(tmp[k]>=10 && k>=1) { tmp[k-1]=tmp[k-1]+tmp[k]/10; C[ii]=tmp[k]%10; ii++; } else if(tmp[k]<10 && k>=1) { C[ii]=tmp[k]; ii++; } else { if(tmp[0]>=10) { C[ii]=tmp[0]%10; ii++; C[ii]=tmp[0]/10; } else C[ii]=tmp[0]; } } for(int h=ii;h>=0;h--) { cout<<C[h]<<""; } return 0;}
输入与输出
用Python验证:
结果是一样的
阅读全文
0 0
- 分治算法-大整数乘法
- 分治算法--大整数乘法
- 【分治算法】大整数乘法
- 算法学习-分治法-大整数乘法
- 大整数乘法(非分治算法)
- 大整数分治乘法
- 大整数乘法---分治
- 大整数乘法-分治
- 分治-大整数乘法
- 大整数乘法(分治法)
- 大整数乘法 ------分治法
- 递归分治-大整数乘法
- 分治算法之大整数乘法--big mutiply
- 算法06:大整数乘法分治算法——分治法Part2
- 分治法大整数乘法和普通大整数乘法
- 大整数乘法算法
- 【算法】 大整数乘法
- 五大常用算法(一) 分治算法(2) 大整数乘法
- java作业
- 只有头指针的单链表逆序
- android 公开接口收集记录
- 浅谈Cookie、Session
- C++ 通过cvs格式文件构建Eigen的Matrix对象
- 【分治算法】大整数乘法
- CSS3 calc的用法详解
- 机器学习-方差
- IntelliJ初使用:IntelliJ创建简单的maven项目
- Spring框架之基础类—ScannedGenericBeanDefinition实现类
- a
- KNN和K-means
- Shiro 处理ajax请求 拦截登录超时---解决!
- android system hack Cipher