1381. a*b 大数相乘
来源:互联网 发布:macbt下载软件 编辑:程序博客网 时间:2024/05/17 17:42
1381. a*b
Description
Give two positive integers a and b, please help us calculate a*b.
Input
The first line of the input is a positive integer T. T is the number of test cases followed.
Each test case contain two integer a,b (0<=a<=10^100, 0<=b<=10,000) given in one line.
Output
The output of each test case should consist of one line, contain the result of a*b.
Sample Input
12 7
Sample Output
14
题目分析:
大数相乘:由于数字太大,不能直接相乘,必须先转换成字符串,然后再逐位相乘。
#include<iostream>#include<string>#include<cstring>using namespace std;int num[10000];int sa[10000];int sb[10000];int main(){ int time; cin>>time; while(time--) { memset(num,0,sizeof(num));//把数组初始化为0 memset(sa,0,sizeof(sa)); memset(sb,0,sizeof(sb)); string a,b; cin>>a>>b; if(a=="0"||b=="0") //若a,b其中一个为0,则输出0 { cout<<0<<endl; continue; } //以 1为初始位分别逆向存储a,b的每位数字 int n=1,m=1; for(int i=a.size()-1;i>=0;i--) sa[n++]=a[i]-'0'; for(int i=b.size()-1;i>=0;i--) sb[m++]=b[i]-'0'; for(int i=1;i<m;i++) //相乘处理 { int v=0; //初始化进位为0 for(int j=1;j<n;j++) { num[i+j-1]+=sb[i]*sa[j]; v=num[i+j-1]/10; //进位 num[i+j]+=v; //下一位加上前一位的进位 num[i+j-1]=num[i+j-1]%10; //求余即为本位当前数值 } } for(int k=9999;k>=1;k--) //逆向输出答案 { if(num[k]!=0) { for(int i=k;i>=1;i--) cout<<num[i]; cout<<endl; break; } } } return 0;}
- 1381. a*b 大数相乘
- C语言大数相乘A × B problem
- A × B problem(大数相乘算法)
- 傅里叶大数相乘算法HDU A * B Problem Plus
- AOJ152 A X B problem(大数相乘、高精度乘法)
- hdu 1402 A * B Problem Plus (FFT + 大数相乘)
- 大数相加A+B
- 大数hdu1002 A+B
- 大数A+B
- 高精度大数A+B
- 大数A-B
- A*B 大数
- 大数A+B
- A+B。大数相加。
- 大数的a+b
- 大数a*b
- hdoj1002大数a+b!!!
- hdoj3787 大数A+B
- HDU_2057 A + B Again
- Android框架源代码下载与调试技巧
- 数据库中表的简单操作
- NEFU 115 斐波那契的整除 循环节
- 基数排序
- 1381. a*b 大数相乘
- 集合
- E4.1--E2
- Solr分布式索引过程源码解析
- el表达式
- 作业
- E2
- 这半年,经历了什么?!
- Git 常用命令