Cryflmind @ 2023-09-25 22:34:51
代码:
#include<bits/stdc++.h>
using namespace std;
struct Bignum{
int lens=0,nums[5100];
Bignum(string x){
memset(nums,0,sizeof(nums));
lens=x.length();
for(int i=1;lens>=1;lens--,++i)
{
nums[i] = x[lens-1]-'0';
}
lens=x.length();
}
int &operator[](int i)
{
return nums[i];
}
void flat(int end)
{
lens=end;
for(int i=1;i<=lens;i++)
{
nums[i+1]+=nums[i]/10,nums[i]%=10;
}
for(;!nums[lens];)
{
lens--;
}
}
void print()
{
for(int i=max(lens,1);i>=1;i--)
{
cout<<nums[i];
}
}
};
Bignum operator+(Bignum a,Bignum b)
{
Bignum c("0");
int lens=max(a.lens,b.lens);
for(int i=1;i<=lens;i++)
{
c[i]+=a[i]+b[i];
}
c.flat(lens+1);
return c;
}
Bignum operator*(Bignum a,Bignum b)
{
Bignum c("0");
c.lens=a.lens+b.lens;
for(int i=1;i<=a.lens;i++)
{
for(int j=1;j<=b.lens;j++)
{
c[i+j-1]+=a[i]*b[j];
}
}
c.flat(c.lens+1);
for(;!c.nums[c.lens];)
{
c.lens--;
}
return c;
}
int main()
{
string ta,tb;
getline(cin,ta);
getline(cin,tb);
Bignum a(ta),b(tb),sumsans("0");
sumsans=a*b;
sumsans.print();
return 0;
}
怎么测都对为啥提交全部WA啊
by shuangmu @ 2023-09-26 08:25:51
有可能是数据的锅,比如你得输入两个换行符……因为 Windows 下生成数据就会多一个换行
by shuangmu @ 2023-09-26 08:27:17
这里建议字符串能用scanf("%s") 输入就用这个,因为可以忽略换行什么的
by Cryflmind @ 2023-09-26 09:38:06
@shuangmu 好嘛……你猜怎么着,scanf也没过去,然后我cin过去了……
by Cryflmind @ 2023-09-26 09:39:49
不过为啥scanf会导致RE啊……