时间限制: 1 Sec 内存限制: 64 MB
题目描述
Redraiment碰到了一个难题,需要请你来帮忙:给你两个整数,请你计算A × B。
输入
数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数。 接着有T组数据,每组数据只有一行,包括两个非负数A和B。 但A和B非常大,Redraiment能保证这些数用long来保存一定会溢出。 但A和B的位数最大不会超过100位。
输出
对应每组测试数据,你都要输出两行: 第一行为:"Case #:", # 代表这是第几组测试数据。 第二行是一个等式:"A * B = Sum", Sum 代表 A × B 的结果。 你要注意这个等式里包含了几个空格。 要求每组数据之间都需要保留一个空行。
样例输入
2
1 2
123456789 987654321
样例输出
Case 1:
1 * 2 = 2
Case 2:
123456789 * 987654321 = 121932631112635269
提示
来源
多亏了这道题,改了板子的bug...
#include <bits/stdc++.h>
#define cl(x) memset(x,0,sizeof(x))
#define _cl(a,b) memset(a,0,(b+1)<<2)
#define At(x,y) memset(x,y,sizeof x)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define drep(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
#define pb push_back
#define vct vector
#define pq priority_queue
#define all(x) x.begin(),x.end()
#define int long long
#define fi first
#define se second
//#pragma GCC optimize(2)
using namespace std;
inline int min(int a,int b) {return a<b?a:b;}
inline int max(int a,int b) {return a>b?a:b;}
//map<string,map<string,int> > mp;
//pq <ll,vct<ll>,less<ll> > now,last;
//vct<vct<int> > vt(n+1,vct<int>(m+1,0))
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll mod=1e9+7;
const int MOD=998244353;
const int N=1e2+10;
int cnt;
vct<int> mul(vct<int> &a,vct<int> &b)
{
int sa=a.size(),sb=b.size();
vct<int> c(sa+sb+10,0);
int t=0;
for(int i=0;i<sa;i++)
{
for(int j=0;j<sb;j++){
if(i<sa&&j<sb) t=a[i]*b[j];
int idx=i+j;
while(t){
t+=c[idx];
c[idx++]=t%10;
t/=10;
}
}
}
int idx=sa+sb;
while(t){
t+=c[idx];
c[idx]=t%10;
t/=10;
}
while(c.size()>1&&c.back()==0) c.pop_back();
return c;
}
void solve()
{
string s1,s2;
cin>>s1>>s2;
vct<int> a,b;
int sa=s1.size(),sb=s2.size();
for(int i=sa-1;i>=0;i--) a.pb(s1[i]-'0');
for(int i=sb-1;i>=0;i--) b.pb(s2[i]-'0');
vct<int> c=mul(a,b);
int sc=c.size();
cout<<"Case "<<cnt<<":\n";
cout<<s1<<" * "<<s2<<" = ";
for(int i=sc-1;i>=0;i--) cout<<c[i];
return ;
}
signed main()
{
// srand(time(NULL));
// freopen("2022_XinShengSai_1.in", "r", stdin);
// freopen("2022_XinShengSai_1.out", "w", stdout);
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
int t;
cin>>t;
// t=1;
for(cnt=1;cnt<=t;cnt++){
solve();
if(cnt<t) cout<<"\n\n";
}
return 0;
}
/*
1
1 2
*/