KOTSRwy2 @ 2024-12-11 20:28:37
#include <bits/stdc++.h>
using namespace std;
void string_to_num(string & a,vector<int> & n)
{
for(int i = 0;i < a.length();i++)
{
n[i] = a[a.length()-i-1] - '0';
}
}
int main()
{
string n1,n2;
getline(cin,n1);
getline(cin,n2);
vector<int> num1(2001,0),num2(2001,0);
vector<int> re(4e6+10,0);
string_to_num(n1,num1);
string_to_num(n2,num2);
for(int i = 0;i < n1.length();i++)
for(int j = 0;j < n2.length();j++)
re[i + j] += num1[i] * num2[j];
for(int i = 0;i < 4e6 + 10;i++)
{
if ( re[i] > 9 )
{
re[i + 1] += re[i] / 10;
re[i] = re[i] % 10;
}
}
bool flag = false;
for(int i = 4e6+5;i >=1 ;i--)
{
if(re[i] != 0)
{flag = true;}
if(flag)
{cout << re[i];}
}
cout << re[0];
return 0;
}
by lyc_qwq @ 2024-12-11 20:32:17
@KOTSRwy2 我的代码:
#include<bits/stdc++.h>
using namespace std;
string s,ss;
int a[4000],b[4000],c[4000];
int main(){
cin>>s>>ss;
int l=s.size();
int ll=ss.size();
for(int i=0;i<l;i++)
a[i]=s[l-i-1]-'0';
for(int i=0;i<ll;i++)
b[i]=ss[ll-i-1]-'0';
for(int i=0;i<l;i++){
int x=0,j;
for(j=0;j<ll;j++){
c[i+j]=a[i]*b[j]+x+c[i+j];
x=c[i+j]/10;
c[i+j]%=10;
}
if(x!=0)
c[i+j]=x;
}
int lc=l+ll;
while(lc>0 && !c[lc])
lc--;
for(int i=lc;i>=0;i--)
cout<<c[i];
return 0;
}
by lyc_qwq @ 2024-12-11 20:32:50
壶关OK?
by lipeizheng @ 2024-12-11 20:36:37
试一下 55 100,我这会卡死
by Terrible @ 2024-12-11 20:50:33
@KOTSRwy2
请注意洛谷题目数据可能含有 \r
!!,getline
读入后加上这个
if(!n1.empty()&&n1.back()=='\r')n1.pop_back();
if(!n2.empty()&&n2.back()=='\r')n2.pop_back();
by Terrible @ 2024-12-11 20:51:38
这个样例第一行末尾多一个空格也是醉了,是有意提醒 \r
的存在吗?为什么不把数据改规范。
by KOTSRwy2 @ 2024-12-11 21:16:22
@Terrible 谢谢大佬,有用ヾ(≧▽≦*)o,但是只过了第一个测试点。
by KOTSRwy2 @ 2024-12-11 21:17:08
@lipeizheng我在vscode上运行没问题啊
by Terrible @ 2024-12-11 21:18:25
@KOTSRwy2
《if(!n2.empty()&&n1.back()=='\r')n2.pop_back();
》你复制粘贴上去都不会出这种问题。。。
不过 \r
这种问题可能也就洛谷上有了。
by KOTSRwy2 @ 2024-12-11 21:24:48
@Terrible 加上去了但是就过了一,然后我把测试点二下载了,输出的结果是一样的。
by Terrible @ 2024-12-11 21:28:42
@KOTSRwy2 你代码里两个都是 n1.back()=='\r'
。显然后一个应该改为 n2.back()=='\r'
。