【高精度计算 02】 大整数乘法
来源:互联网 发布:怎么在淘宝上刷销量 编辑:程序博客网 时间:2024/05/16 04:51
大整数乘法 算法:#include<iostream>#include<stdio.h>using namespace std;#define MAX 100void GetNum(char *s){ scanf("%s",s);}//字符串转换成整形数组void convert(char *s1,int *a){ int len1=strlen(s1); for(int i=0;i<=len1;i++){ a[len1-1-i]=s1[i]-'0'; //逆序输出数组 }} //交叉乘积,进行累加void multiNum(char *s1,char *s2,int *a,int *b,int *c){ int len1=strlen(s1); int len2=strlen(s2); for(int i=0;i<=len1;i++){ for(int j=0;j<=len2;j++){ c[i+j]+=a[i]*b[j]; } }}void result(char *s1,char *s2,int *c){ int len1=strlen(s1); int len2=strlen(s2); int len=len1+len2; //处理进位的问题 for(int i=0;i<len;i++){ c[i+1]+=c[i]/10; c[i]=c[i]%10; } //输出结果 int j=len; while(c[i]==0&&i>0) i--; if(i<0) printf("0"); else{ while(i>=0) printf("%d",c[i--]); } printf("\n");}void main(){ char s1[MAX],s2[MAX]; int c[MAX*2],a[MAX],b[MAX]; GetNum(s1); GetNum(s2); //输入两个字符串 memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); convert(s1,a); convert(s2,b); //将字符数组转化为整形数组 multiNum(s1,s2,a,b,c); //求积 result(s1,s2,c); //输出最后的结果}
算法思想:
———————————————————————————-
两个大数相乘,就是使用每一位与另外一个进行相乘,然后使用交叉相加,
最后数组的每一位仅保留末尾一位,逐步累加,最后输出数组。
8 7 6 5 * 16 14 12 10 2 24 21 18 15 3 32 28 24 20 4
16 14 12 10 24 21 18 15 32 28 24 20 16 38 65 56 39 20
16 38 65 56 39 20 2 16+4=20 38+7=45 65+6=71 56+4=60 39+2=41 留2 留0进2 留5进4 留1进7 留0进6 留1进4 留0进2 2 0 5 1 0 1 0
0 0
- 【高精度计算 02】 大整数乘法
- 高精度计算-大整数乘法
- 高精度(大整数乘法)
- 大整数乘法(高精度)
- 高精度计算-大整数加减法
- 高精度计算-大整数除法
- 大整数运算乘法(高精度运算)
- OpenJudge百炼-2980-大整数乘法-C语言-高精度计算
- 【高精度计算 01】 大整数加法
- 高精度 大整数 计算 模板优化方向
- 整数高精度乘法
- 使用快速傅里叶变换计算大整数乘法
- 使用快速傅里叶变换计算大整数乘法
- POJ 1001 解题报告 高精度大整数乘法模版
- 高精度计算 大数乘法
- 高精度计算(五)乘法
- 整数高精度计算
- 高精度 大整数加法
- A*B
- 晨会
- 猜数字小游戏
- N^3问题
- 统计次数问题
- 【高精度计算 02】 大整数乘法
- CentOS更改yum源
- 在使用代码布局的时候几个技巧,可减少 算坐标的麻烦!!
- 35个Java代码性能优化总结
- 图片加载+本地缓冲
- java中的流介绍
- 8600手机
- 欢迎使用CSDN-markdown编辑器
- Activity和Fragment transition介绍