3117 高精度练习之乘法
2015-07-18 17:10
344 查看
3117 高精度练习之乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Output Description 输出A*B的值 样例输入 Sample Input 3 12 样例输出 Sample Output 36 数据范围及提示 Data Size & Hint 两个正整数的位数不超过500位 ******************************去除前导0用的指针i可以初始值为la+lb-1,优化 ******************************乘法乘出来的数需要累加,不能像加法那样位数相对,故需要直接在答案数组上动手脚 ******************************加法也可以这样做,省去申请一个变量的空间 #include<iostream> #include<string.h> using namespace std; void Multiply(int a[],int b[],int la,int lb); void run(char a[],char b[]) { int A[501],B[501]; int i,j,la = strlen(a),lb = strlen(b); memset(A,0,sizeof(A)); memset(B,0,sizeof(B)); for(i = 0; i < la; i++) { A[i] = a[la-i-1] - '0'; } for(i = 0; i < lb; i++) { B[i] = b[lb-i-1] - '0'; } Multiply(A,B,la,lb); } void Multiply(int a[],int b[],int la,int lb) { int i,j = 0,ANS[510]; int tmp1 = 0 , tmp2 = 0; memset(ANS,0,sizeof(ANS)); for(i = 0; i < la; i++) { for(j = 0; j < lb; j++) { ANS[i+j] = a[i]*b[j] + ANS[i+j]; ANS[i+j+1] += ANS[i+j] / 10; ANS[i+j] %= 10; } } i = la+lb-1; //i = 510 可否优化? while(ANS[i] == 0) i--; for(j = i; j >= 0; j--) cout<<ANS[j]; cout<<endl; } int main() { char a[501],b[501]; cin>>a>>b; run(a,b); return 0; }
相关文章推荐
- poj 3669 线段树成段更新+区间合并
- JDBC
- PHP 时间与字符串的相互转化
- 华为 路由器 NAT端口映射
- 单例模式
- 【Android】资源系列(一) -- 国际化(多语言)
- foobar 解决dts和sacd的问题
- vb.net 广播只有本机能收 Socket 客户端不能收 win8
- codeblocks快捷键(转载)
- 还是java中的编码问题
- 递推DP Codeforces Round #260 (Div. 1) A. Boredom
- 2015年ALPC暑期专题练习I (计算几何) B
- python 脚本语言1
- codevs1040
- sphinx 配置
- 文档宽高和窗口事件
- 类和对象, 实例变量可见度, 自定义初始化
- poj 1459 超级源点超级汇点EK最大流
- HP 3PAR StoreServ 7200 存储调试相关
- HDU 3605 Escape【最大流】