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