急~~~请高手帮忙~~~求出N!的某一位数字

[复制链接]
查看11 | 回复7 | 2021-1-27 07:18:43 | 显示全部楼层 |阅读模式
一个n和一个k,表示求n!的第k位数字,k>0时表示求从高往低第k位数字,k小于0时求从低往高的第|k|位,比如,n=5时n!为120,此时,若k=1,2,3,则结果分别为1,2,0,k为-1,-2,-3,结果分别为0,2,1。
n不超过11,k为绝对值不超过5的整数,且|k|不会超过n!的位数,不会是0,比如n==5时,n!=120。|k|0
例:输入7-2结果为4
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层
n不超过11,k为绝对值不超过5的整数
=================================
数值这么小,穷举即可。
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层
谁能给个C++的程序啊
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层

#defineMAX11
//return(n!)
intfactorial(intn)
{
if(n0)?(k-1):strlen(table[n])+k]-'0';
}
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层
正在学习中
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层
这位高手能不能给个C++的程序,谢谢了,急啊~~~~
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层
classFun
{
public:
staticintf(intn,intk)
{
/*
0:1
1:1
2:2
3:6
4:24
5:120
6:720
7:5040
8:40320
9:362880
10:3628800
11:39916800
*/
staticchar*table[]=
{
"1",
"1",
"3",
"6",
"24",
"120",
"720",
"5040",
"40320",
"362880",
"3628800",
"39916800"
};
if(n0)?(k-1):strlen(table[n])+k]-'0';
}
};
回复

使用道具 举报

千问 | 2021-1-27 07:18:43 | 显示全部楼层
#include"math.h"
intsum(intn)//求接乘值
{
ints=1;
for(inti=n;i>0;i--)
s*=i;
return(s);
}
intt(inta)//求10的a次方,应该是有个现成的表示法,我忘了,不好意思,我也初学
{
ints=1;
for(inti=a;i>0;i--)
s*=10;
return(s);
}
inttp(ints)//求s的总位数,我本以为可以不用求的,但是又想不出更好的
{
intx=1,i=0;
while(x!=0)
{
x=s/10;
s=/10;
i++;
}
return(i);
}
intposition(ints,intk)//判断位数值
{
intm,k1,i,s1;
if(k0)
{for(i=tp(s);i>k;i--)
s1=s%t(i);
m=s1%10;
}
return(m);
}
intmain()
{intn,k,s;
do
{cin>>n>>k;
s=sum(n);
if(n>11||n5||k==0||k>tp(s))
cout11||n5||k==0||k>tp(s));//判断数值是否要求,不符则报错
cout0)
k1=tp(s)-k+1;
i=t(k1-1);
m=(s/i)%10;
return(m);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行