| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:[新手求助]求出N!的某一位数字怎么写啊!
只看楼主 加入收藏
dbw110
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-7-10
收藏
 问题点数:0 回复次数:6 
[新手求助]求出N!的某一位数字怎么写啊!
求出N!的某一位数字
一个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|<=3。n>0
谁帮我写一下,N!我知道怎么写,但这个位数的东西我写不出来啊!谢谢了
搜索更多相关主题的帖子: 数字 位数 整数 
2007-07-10 17:26
dbw110
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-7-10
收藏
得分:0 
请高手帮帮啊
2007-07-10 17:43
MQKt
Rank: 2
等 级:论坛游民
帖 子:235
专家分:20
注 册:2006-6-29
收藏
得分:0 
int i,N,K,K1,K2,K3,K4,K5;//////K1~K5分别为输出的K值
int Sum,Size,Ws;
N = 6;/////////随便设置的N值
Sum = N;
K = 3;/////////随便设置的K值
for(i=N-1;i>0;i--)
{
Sum *= i;////阶乘
}
switch(K-1) {
case 0:
Size = 0;
break;
case 1:
Size = 10;
break;
case 2:
Size = 100;
break;
case 3:
Size = 1000;
break;
case 4:
Size = 10000;
break;
case 5:
Size = 100000;
break;
default:
break;
}
if(N-11>0.0001)
{
AfxMessageBox("阶乘数太大,\n请重新输入!");
return;
}
if(fabs(K)>5 || K==0)
{
AfxMessageBox("位数不符合要求,\n请重新输入!");
return;
}
if(fabs(K)*Size-Sum>0)
{
AfxMessageBox("超过n!的位数,\n请重新输入!");
return;
}
CString str;
str.Format("%d",Sum);
Ws = str.GetLength();
switch(Ws) {
case 0:
Size = 0;
break;
case 1:
Size = 10;
break;
case 2:
Size = 100;
break;
case 3:
Size = 1000;
break;
case 4:
Size = 10000;
break;
case 5:
Size = 100000;
break;
case 6:
Size = 1000000;
break;
case 7:
Size = 10000000;
break;
case 8:
Size = 100000000;
break;
/////////////////////N不超过11最大位数为8
default:
break;
}
if(K>0)
{
if(Size/100000 >1)
Sum %= (Size/(Size/100000));
K5 = Sum/10000;
K4 = (Sum%10000)/1000;
K3 = ((Sum%10000)%1000)/100;
K2 = (((Sum%10000)%1000)%100)/10;
K1 = ((((Sum%10000)%1000)%100)%10)/1;
}

2007-07-11 09:33
MQKt
Rank: 2
等 级:论坛游民
帖 子:235
专家分:20
注 册:2006-6-29
收藏
得分:0 
            写得很罗嗦,水平就这样了,看看谁能帮你写个简单一点的.

2007-07-11 09:34
little_stone
Rank: 1
等 级:新手上路
威 望:1
帖 子:163
专家分:0
注 册:2007-5-29
收藏
得分:0 

楼上牛人啊


2007-07-11 10:07
我为幻笑
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-10
收藏
得分:0 
首先用用递归求出N!
long count(long n)
{
long result;
if(n==1)
return 1;
result= count(n-1)*n;
return result;
}
long Result=count(N);
将Result转化为字符串
CString strN;
strN.Format(_T("%d"),Result);
最找出第K位置字符
int length=strN.GetLength();
CString ch;
if(K>0)
ch=strN.Mid(K,1);
else
{
K=len+K+1;
ch=strN.Mid(K,1)
}
AfxMessageBox(ch);

2007-07-12 16:18
MQKt
Rank: 2
等 级:论坛游民
帖 子:235
专家分:20
注 册:2006-6-29
收藏
得分:0 
      strN.Mid(K,1)这个语句倒是不错

2007-07-13 08:37
快速回复:[新手求助]求出N!的某一位数字怎么写啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027149 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved