@[FYH666666](/user/1099417) 虽然但是,你的5!输出为5050000
by queenbee @ 2024-04-13 19:51:33
@[FYH666666](/user/1099417)
```cpp
#include<bits/stdc++.h>
using namespace std;
int t;
int q[100000];
int main(){
cin>>t;
while(t--){
int jw=0,len=1,a,b;
for(int i=1;i<=100000;i++) q[i]=0;
q[1]=1;
scanf("%d%d",&a,&b);
for(int i=2;i<=a;i++){
jw=0;
for(int j=1;j<=len;j++){
q[j]=q[j]*i+jw;
jw=q[j]/10;
q[j]=q[j]%10;
}
while(jw>0){
len++;
q[len]=jw%10;
jw/=10;
}
}
// for(int i=len;i>=1;i--) printf("%d",q[i]);
// printf("\n");
long long cnt=0;
for(int i=1;i<=len;i++){
if(q[i]==b) cnt++;
}
printf("%ld\n",cnt);
}
return 0;
}
```
这样阶乘对了,但全WA
by queenbee @ 2024-04-13 19:56:46
@[FYH666666](/user/1099417) AC代码```cpp
#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
scanf("%d",&t);
while(t--){
int q[100000];
int jw=0,len=1,a,b;
for(int i=1;i<=100000;i++) q[i]=0;
q[1]=1;
scanf("%d%d",&a,&b);
for(int i=2;i<=a;i++){
jw=0;
for(int j=1;j<=len;j++){
q[j]=q[j]*i+jw;
jw=q[j]/10;
q[j]=q[j]%10;
}
while(jw>0){
len++;
q[len]=jw%10;
jw/=10;
}
}
// for(int i=len;i>=1;i--) printf("%d",q[i]);
// printf("\n");
long long cnt=0;
for(int i=1;i<=len;i++){
if(q[i]==b) cnt++;
}
printf("%ld\n",cnt);
}
return 0;
}
```
by bulopi @ 2024-04-13 19:57:46
@[FYH666666](/user/1099417) AC代码
```cpp
#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
scanf("%d",&t);
while(t--){
int q[100000];
int jw=0,len=1,a,b;
for(int i=1;i<=100000;i++) q[i]=0;
q[1]=1;
scanf("%d%d",&a,&b);
for(int i=2;i<=a;i++){
jw=0;
for(int j=1;j<=len;j++){
q[j]=q[j]*i+jw;
jw=q[j]/10;
q[j]=q[j]%10;
}
while(jw>0){
len++;
q[len]=jw%10;
jw/=10;
}
}
long long cnt=0;
for(int i=1;i<=len;i++){
if(q[i]==b) cnt++;
}
printf("%ld\n",cnt);
}
return 0;
}
```
by bulopi @ 2024-04-13 19:58:35
@[bulopi](/user/948361)
为啥q在while里定义才能A?
by queenbee @ 2024-04-13 20:01:48
## 具体错误有以下几点:
1. 下面这样的方式循环是错误的
```cpp
while(t-->=0){
t--;
…………
}
```
可改为
```cpp
while(t--){
…………
}
```
2. 高精度进位的那个循环要放在外面,不然算法逻辑都是错的,原来是这样:
```cpp
for(int j=1;j<=len;j++){
q[j]=q[j]*i+jw;
jw=q[j]/10;
q[j]=q[j]%10;
while(jw>0){
len++;
q[len]=jw%10;
jw/=10;
}
}
```
可以改为这样:
```cpp
for(int j=1;j<=len;j++){
q[j]=q[j]*i+jw;
jw=q[j]/10;
q[j]=q[j]%10;
}
while(jw>0){
len++;
q[len]=jw%10;
jw/=10;
}
```
3. 还有就是数组开小了,要加个0
[AC记录](https://www.luogu.com.cn/record/155709088)(球关)
by bulopi @ 2024-04-13 20:03:57
@[bulopi](/user/948361)
建议开到100001,虽然我不知道为什么在遍历1~100000是没有超,但是在main外面定义会WA
by queenbee @ 2024-04-13 20:09:11
@[bulopi](/user/948361) 已关感谢啦
by FYH666666 @ 2024-04-13 20:34:53
@[queenbee](/user/789564) 关注啦谢谢
by FYH666666 @ 2024-04-13 20:35:26