A * B Problem Plus
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12315 Accepted Submission(s): 2157
Problem Description
Calculate A * B.
Input
Each line will contain two integers A and B. Process to end of file.
Note: the length of each integer will not exceed 50000.
Note: the length of each integer will not exceed 50000.
Output
For each case,output A * B in one line.
Sample Input
1 2 1000 2
Sample Output
2 2000
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> #include <queue> #include <map> #include <stack> #include <list> #include <vector> #define LL __int64 #define M 10000000000 using namespace std; LL a[5100],b[5100],c[110000]; char s1[500010],s2[500010]; void MUL() { int t,i,j; memset(c,sizeof(c)); for (i=a[0];i>0;i--) { t=a[0]-i+1; for (j=b[0];j>0;j--) { c[t+b[0]-j+1]+=a[i]*b[j] / M; c[t+b[0]-j]+=a[i]*b[j]%M; } if (c[t+1]) c[0]=t+1; else c[0]=t; } } int main() { while (gets(s1)) { gets(s2); strrev(s1); strrev(s2); int l1=strlen(s1)-1; int l2=strlen(s2)-1; memset(a,sizeof(0)); memset(b,sizeof(0)); while(l1>=0) { LL k=0,s=0; while (k<10 && l1>=0) { s=s*10+s1[l1]-'0'; k++; l1--; } a[0]++; a[a[0]]=s; } while(l2>=0) { int k=0,s=0; while (k<10 && l2>=0) { s=s*10+s2[l2]-'0'; k++; l2--; } b[0]++; b[b[0]]=s; } MUL(); printf("%I64d",c[c[0]]); for (int i=c[0]-1;i>1;i--) printf("%010I64d",c[i]); printf("%I64d\n",c[1]); //cout<<endl; } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。