Sxu520 @ 2024-09-20 15:27:22
想问问是不能用二维数组吗 像这样写全WA了
#include<bits/stdc++.h>
using namespace std;
int len(int a[][3050],int i){
int j=3000;
for(j=3000;j>=0;j--){
if(a[i][j]!=0)
break;
}
return j;
}
int main(){
int n;
cin>>n;
int a[15][3050]={0};
for(int i=0;i<n;i++){
cin>>a[i][0]>>a[i][1];
a[i][3]=1;
} //从a[i][3]开始乘以及存数
//a[i][0]存n,a[i][1]存a,a[i][2]存结果
for(int i=0;i<n;i++){
for(int k=2;k<=a[i][0];k++){
for(int j=3;j<10;j++){
a[i][j]=a[i][j]*k;
} //每一位都乘k
for(int h=3;h<3000;h++){
a[i][h+1]=a[i][h+1]+a[i][h]/10;
a[i][h]=a[i][h]%10;
} //进位
}
}
for(int i=0;i<n;i++){
for(int j=3;j<=len(a,i);j++){
if(a[i][j]==a[i][1])
a[i][2]++;
} //将结果放到a[i][2]中
cout<<a[i][2];
if(i!=n-1)
cout<<endl;
}
return 0;
}
by Sxu520 @ 2024-09-20 15:31:16
但是像这样写就AC了,感觉差别不大呀,有大佬解释下吗
#include<bits/stdc++.h>
using namespace std;
int len(int a[]){
int j=3000;
for(j=3000;j>=0;j--){
if(a[j]!=0)
break;
}
return j;
}
int main(){
int n;
cin>>n;
int a[12][3]={0};
int b[3050]={1};
for(int i=0;i<n;i++)
cin>>a[i][0]>>a[i][1];
for(int i=0;i<n;i++){
for(int k=2;k<=a[i][0];k++){
for(int j=0;j<3000;j++){
b[j]*=k;
} //每一位都乘k
for(int j=0;j<3000;j++){
b[j+1]+=b[j]/10;
b[j]%=10;
} //进位
}
for(int j=0;j<=len(b);j++){
if(b[j]==a[i][1])
a[i][2]++;
} //将结果放到a[i][2]中
cout<<a[i][2]<<endl;
b[0]=1;
for(int j=1;j<3000;j++)
b[j]=0; //给b[0]置1,其余置0
}
}
by Yxy7952 @ 2024-09-20 15:31:16
@Sxu520
额,有可能是你自己的问题