C++ 运行检测出现问题
#include
using namespace std;
int main()
{
int n,p;
cin >> n >> p;
int m = 1;
for(int i=1;i<=n;i++)
{
m *= i;
}
int a = 0;
for(int j=1;jif(m % p != 0) break;
else
{
m /= p;
a++;
}
}
cout << a;
return 0;
}
这个题目有问题,没有限定n的取值范围
阶乘大于17后溢出,n的值要小于17.
#include <iostream>
using namespace std;
int main()
{
int n,p;
cin >> n >> p;
int m = 1;
for(int i=1;i<=n;i++)
{
m *= i;cout<<m<<" ";
}
int a = 0;
cout<<endl<<m<<": ";
for(int j=1;j<m/p;j++)
{
if(m % p != 0) break;
else
{
m /= p;
cout<<p<<'*';
a++;
}
}
cout <<"other"<<endl;
cout << a;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
long long int n,p,k=2,s;
int main()
{
cin >> n >> p;
long long int m=1;
for(int i=1;i<=n;i++)
m *= i;
while(m!=1)
{
if(m/k==1)
{
s++;
break;
}
if(m%k!=0)
k++;
m/=k;
if(k==p)
s++;
}
cout << s;
return 0;
}
这道题不需要算阶乘的值 直接取一数算一个数就行了。比如1 * 2 * 3 * 4 * 5 * 6 就1到6去每个去算p的质因数个数就行