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; }