大数相乘
来源:互联网 发布:java asm 官网 编辑:程序博客网 时间:2024/06/10 01:44
两个大数相乘,可以分解为一个大数因子乘以另一个分解的了大数因子,即乘以后面大数因子的各个位的数,根据对应位进位。
第一种方法:
一、先将第一个因子转换成对应第二个因子对应应该进位的n个因子(比如123*222先将123转换成123,,1230,,12300三个数)
二、然后用前面转化的n个因子分别乘以第二个因子各个位上面的数
三、然后在一一进行大数求和的运算,得出结果
明显这样做的话内存和时间的开销都比较大,数据大了肯定行不通。
第二种方法:
一、直接将两个大数低位对齐(和大数加法类似),根据字符串遍历移位的特点一遍乘一边加(结果默认一个全是零的串)
二、进行进位操作
明显这第二个方法内存时间都节约很多。
核心部分代码:
//multiplyer for(string::size_type i = 0;i < str1.length();i ++) for(string::size_type j = 0; j < str2.length();j ++) ans[i+j] += (str1[i]-'0')*(str2[j]-'0');
样例:
input
99999 99999
12345 2
54321 2
output
9999800001
24690
108642
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;#define MAXN 2000int ans[MAXN];int lenth;//reverse stringvoid reverse_str(string &str1){ for(string::size_type i = 0,j = str1.length()-1;i < j;i++,j--) { char ch = str1[i]; str1[i] = str1[j]; str1[j] = ch; }}//mutiplyer two big numbervoid add_number(string const str1,string const str2){ memset(ans,0,MAXN); lenth = str1.length() + str2.length(); //multiplyer for(string::size_type i = 0;i < str1.length();i ++) for(string::size_type j = 0; j < str2.length();j ++) ans[i+j] += (str1[i]-'0')*(str2[j]-'0'); //carry for(int i = 0;i < lenth;i ++) { if(ans[i]>9) { int val = ans[i]/10; ans[i] %= 10; ans[i+1] += val; } } if(ans[lenth-1] == 0) { lenth--; } //print answer// for(int i = lenth-1;i>=0;i--)// {// printf("%d",ans[i]);// }// cout<<endl;}//print answervoid print_ans(){ int flag = 1; for(int i = lenth-1;i >= 0;i --) { if(i == lenth-1&&ans[i] == 0) { flag = 0; } if(ans[i]!=0) { flag = 1; } if(flag) { printf("%d",ans[i]); } } printf("\n");}int main(){// freopen("test.in","r",stdin);// freopen("test.out","w",stdout); string str1,str2; while(cin>>str1>>str2) { reverse_str(str1); reverse_str(str2); add_number(str1,str2); print_ans(); } return 0;}
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- Android管理Wifi
- VC6.0的ActiveX控件实现
- Objective-C语法之KVO的使用
- 如何播放短的声音 如按键声音
- Win 7 安装 PostgreSQL记录
- 大数相乘
- 电源管理市场今年明显疲软,大幅萎缩6%
- 修改linux的hostname (修改linux系统的IP和hostname)
- 简单字符图形的双重循环
- 如何把书上的字弄到电脑
- 按钮控件的颜色和遍历按钮
- Google Chrome Source Code 源码下载
- 银行 结算 清分清算 对账
- KVO/KVC做了简单的介绍(转)