swustoj大整数乘法(0447)
2017-04-13 16:02
204 查看
在一些应用中,特别是现在的密码学中,常常需要用超过100位的整数来做乘法,以此来对数据加密。
现在有两个小于等于100位的大整数a和b(位数相同),请写程序计算出这两个大整数乘积的结果。
Description
输入有三行
第一行是大整数位数
第一个大整数
第二个大整数
Input
两个大整数的结果
Output
Sample Input
Sample Output
现在有两个小于等于100位的大整数a和b(位数相同),请写程序计算出这两个大整数乘积的结果。
Description
输入有三行
第一行是大整数位数
第一个大整数
第二个大整数
Input
两个大整数的结果
Output
1 2 3 | 10 1111111111 1111111111 |
1 | 1234567900987654321 |
#include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> using namespace std; void Compute(char *a, char *b, char *c) { int n, m; m = strlen(a) - 1; n = strlen(b) - 1; for (int i = m; i >= 0; i--) { a[i] -= '0'; } for (int i = n; i >= 0; i--) { b[i] -= '0'; } c[m + n + 2] = '\0'; long carry = 0; long sum; int j; for (int i = m + n; i >= 0; i--)//每次只算出最后一位数并且保存上一位数在进行下一次运算 { sum = carry; if ((j = (i - m)) < 0) { j = 0; } for (; j <= i&&j <= n; j++) { sum += a[i - j] * b[j]; } c[i + 1] = sum % 10 + '0'; carry = sum / 10; } c[0] = carry + '0'; } int main() { int k; char str1[105]; char str2[105]; char ans[10000]; while(cin >> k)//位数(虽然没什么用)QAQ { scanf("%s%s", str1, str2); //cout << str1 << endl << str2 << endl; Compute(str1, str2, ans); if(ans[0]!='0')//判断一下第一个是否为0,是就不输出ans[0] printf("%s", ans); else { for (int i = 1; i < strlen(ans); i++) { cout << ans[i]; } } cout << endl; } return 0; }
相关文章推荐
- POJ 1001 解题报告 高精度大整数乘法模版
- 程序员面试金典: 9.7位操作 7.4只用加号实现整数的乘法、减法和除法运算
- 大整数乘法 求阶乘
- 大整数乘法分而治之递归实现
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)
- 带符号大整数加减法,乘法,除法,模除,指数
- C语言 大整数乘法,模拟人工计算
- 大整数乘法,似乎不是很健壮,过段时间再编个好的补充上来
- 大数运算(整数的加法和乘法)
- 自己动手写Java大整数《2》优化和乘法
- 大整数乘法——分治法
- 大整数乘法
- 高精度(正整数的加、减、乘法)
- 实现大位整数的加/减/乘法的java工具类
- 不用乘法、除法及取模运算,构造两个整数的除法
- hdu 1402 A * B Problem Plus(FFT-大整数乘法)
- 算法之美--大整数乘法问题
- 整数高精度运算的库(加法,减法,乘法,除法,取模)