计算阶层码数:求n!中某个码数出现的次数
毕业设计
1
#include <iostream>
#include <string>
using namespace std;
int c[3000];
void s2BIG(string s,int a[]){
int l=s.length();
for(int i=1;i<=l;i++)
{
a[i]=s[l-i]-'0';
}
a[0]=l;
}
void addBIG(int a[],int b[],int c[])
{
int al=a[0],bl=b[0],cl=max(al,bl);
for (int i=1;i<=cl;i++){
int t=0;
if(i<=al)
{
t+=a[i];
}
if(i<=bl)
{
t+=b[i];
}
c[i]=t;
}
for (int i=1;i<cl;i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[cl]>10)
{
c[cl+1]=c[cl]/10;
c[cl]%=10;
cl++;
}
c[0]=cl;
}
void printBIG(int a[])
{
for(int i=a[0];i>=1;i--)
{
cout<<a[i];
}
}
void mulBIG(int a[],int b,int c[])
{
int al=a[0],cl=al;
long long t[1005]={};
for(int i=1;i<=cl;i++)
{
t[i]=a[i]*b;
}
for(int i=1;i<cl;i++)
{
t[i+1]+=t[i]/10;
t[i]%=10;
}
while(t[cl]>=10)
{
t[cl+1]=t[cl]/10;
t[cl]%=10;
cl++;
}
for(int i=1;i<=cl;i++)
{
c[i]=t[i];
}
c[0]=cl;
}
int main(){
int n,a;
cin>>n>>a;
s2BIG("1",c);
for(int i=1;i<=n;i++)
{
mulBIG(c,i,c);
}
int cnt=0;
for(int i=1;i<=c[0];i++)
{
if(c[i]==a)
{
cnt++;
}
}
cout<<cnt;
return 0;
}
-
啥叫码数?是指8的阶乘的结果中有几个4吗?可以定义连个函数,一个求阶乘,一个判断阶乘中4的个数
// 1000 的阶乘 2568 位 #include <stdio.h> int a[3000]; int fanc(int n) { int w=0; int i=0, j=0; int t=n; int k=0; // 表示数据的位数。 i=0, k=0; while(t) { a[i++] = t%10; t/=10; k++; } for (j=n-1; j>1; j--) { w=0; // 表示进位 for (i=0; i<k; i++) { t = a[i]*j+w; a[i] = t%10; w = t/10; } while(w) { a[i++] = w%10; w/=10; k++; } } return k; } int getp(int k,int p) { int i=0,count=0; for (i=k-1; i>=0; i--) { if(a[i] == p) count++; } return count; } int main() { int n,p=0,num=0; int k=0; scanf("%d%d",&n,&p); k = fanc(n); num = getp(k,p); printf("%d共有%d个\n",p,num); return 0; }
-
#include <iostream> using namespace std; int fact(int n) { int res = 1; for (int i = 1; i <= n; i++) { res *= i; } return res; } int cal(int n, int k) { int res = 0; while (n != 0) { if (n - n / 10 * 10 == k) { res++; } n /= 10; } return res; } int main() { int n, k; cin >> n >> k; int f = fact(n); int res = cal(f, k); cout << res << endl; }
发表回复