chenqimeng @ 2022-09-25 16:17:34
我问问我哪错了。
看着没问题啊。
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n;
cin>>n;
for(int sd=1;sd<=n;sd++){
int ans[10000]={0},ls[10000]={0};
int s,a,l=1,d=0;
cin>>s>>a;
ans[1]=1;
for(int i=2;i<=s;i++){
int p=false;
for(int j=1;j<=l;j++){
ls[j]+=ans[j]*i;
if(ls[j]>=10){
if(j==l)p=true;
ls[j+1]+=ls[j]/10;
ls[j]%=10;
}
}
if(p==true)l++;
for(int j=1;j<=l;j++){
ans[j]=ls[j];
ls[j]=0;
}
for(int j=l;j>=1;j--)cout<<ans[j];
cout<<endl;
}
for(int i=1;i<=l;i++)if(ans[i]==a)d++;
cout<<d<<endl;
}
}
by qwq666666 @ 2022-09-25 16:21:54
你会不会把测试的语句注释掉
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n;
cin>>n;
for(int sd=1;sd<=n;sd++){
int ans[10000]={0},ls[10000]={0};
int s,a,l=1,d=0;
cin>>s>>a;
ans[1]=1;
for(int i=2;i<=s;i++){
int p=false;
for(int j=1;j<=l;j++){
ls[j]+=ans[j]*i;
if(ls[j]>=10){
if(j==l)p=true;
ls[j+1]+=ls[j]/10;
ls[j]%=10;
}
}
if(p==true)l++;
for(int j=1;j<=l;j++){
ans[j]=ls[j];
ls[j]=0;
}
//for(int j=l;j>=1;j--)cout<<ans[j];
//cout<<endl;
}
for(int i=1;i<=l;i++)if(ans[i]==a)d++;
cout<<d<<endl;
}
}
by chenqimeng @ 2022-09-25 16:44:56
谢谢了
by chenqimeng @ 2022-09-25 16:47:48
但还是错的
by Greenzhe @ 2022-09-27 21:30:27
@chenimeng 帮您调好了,错误原因是因为乘法时进位可能大于
#include<bits/stdc++.h>
//#define int long long
using namespace std;
signed main(){
int n;
cin>>n;
for(int sd=1;sd<=n;sd++){
int ans[10000]={0},ls[10000]={0};
int s,a,l=1,d=0;
cin>>s>>a;
ans[1]=1;
for(int i=2;i<=s;i++){
// int p=false;
int p=0;
for(int j=1;j<=l;j++){
// ls[j]+=ans[j]*i;
ls[j]=ans[j]*i+p;
if(ls[j]>=10){
// if(j==l)p=true;
// ls[j+1]+=ls[j]/10;
p=ls[j]/10;
ls[j]%=10;
}
else p=0;
}
// if(p==true)l++;
while(p>0){
l++;
ls[l]=p%10;
p/=10;
}
for(int j=1;j<=l;j++){
ans[j]=ls[j];
ls[j]=0;
}
// for(int j=l;j>=1;j--)cout<<ans[j];
// cout<<endl;
}
for(int i=1;i<=l;i++)if(ans[i]==a)d++;
cout<<d<<endl;
}
}
另外建议用模块化编程,即将部分功能打包进函数里,说实话您的代码真的有点乱qwq
by Greenzhe @ 2022-09-27 21:30:45
@chenqimeng