| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 794 人关注过本帖
标题:求助一道题
只看楼主 加入收藏
youxiaxyz
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-4-5
收藏
 问题点数:0 回复次数:11 
求助一道题

Problem

请求N!左边第二位的数字

Input

第一行为一整数M.表示M组测试数据,每组测试数据仅一个整数N.4<=N<=100000

Output

输出N! 左边第二个数字

Sample Input

2
4
5

Sample Output

4
2
我没有思路,哪位能帮忙?
搜索更多相关主题的帖子: 测试 数据 
2006-05-01 12:22
飞跃无限
Rank: 1
等 级:新手上路
威 望:1
帖 子:180
专家分:0
注 册:2006-4-16
收藏
得分:0 
还没看懂题目呢我
2006-05-01 12:36
youxiaxyz
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-4-5
收藏
得分:0 
计算n!(n可能很大大于65535)
求出左边的第二位数字
2006-05-01 13:57
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

我刚编的一个求高位数阶乘的,省得今天有人问最后一个非零位,你又问第二位,呵呵
#include <stdio.h>
void cal_fal(int result[],int n,int num)
{
int i=1,j,k;
while(i<=num)
{
if(i==1)
result[0]=1;
for(k=0;k<n;k++)
result[k]*=i;
i++;
for(j=0;j<n;j++)
if(result[j]>=10)
{
result[j+1]+=result[j]/10;
result[j]%=10;
}
}
}
main()
{
int result[300]={0};
int i,k;
long num;
printf("Please input a number:");
scanf("%ld",&num);
cal_fal(result,300,num);
i=299;
while(result[i]==0)
i--;
for(k=i;k>=0;k--)
printf("%d",result[k]);
getch();

}


对不礼貌的女生收钱......
2006-05-01 16:23
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

//思路:
//1.由于只取左起第二位,所以只要求近似值即可
//2.由于N可能高达10万,所以先求n!的常用对数
#include<stdio.h>
#include<math.h>
int main(void)
{ double lgf=0;
char str[20];
long N,i;
scanf("%ld",&N);
for(i=2;i<=N;i++)
lgf+=log(i)/log(10);//换底公式
lgf-=(long)lgf;//截整
lgf=pow(10,lgf);//至此得到n!的"尾数"
sprintf(str,"%lf",lgf);
printf("%c\n",str[2]);//跳过个位和小数点
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-01 17:52
youxiaxyz
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-4-5
收藏
得分:0 
非常感谢六楼
谢谢
2006-05-01 18:18
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
7楼的,4楼给你忙了老半天,你连谢都不谢,也太寒心了吧

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-01 18:20
youxiaxyz
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-4-5
收藏
得分:0 

多谢提醒,但我已经感谢了
在5楼

2006-05-01 22:38
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用soft_wind在2006-5-1 16:23:00的发言:

我刚编的一个求高位数阶乘的,省得今天有人问最后一个非零位,你又问第二位,呵呵
main()
{
int result[300]={0};
int i,k;
long num;
printf("Please input a number:");
scanf("%ld",&num);
cal_fal(result,300,num);
.........................................
}

朋友,您这程序可只管300位哪。而且您太“阔绰”
竟然让一个int(2~4 bytes)存放区区0~9。实际上
对于short int,可让它玩玩“万进制”即令其存放
0~9999。对于long int,让他来个“亿进制”或
“十亿进制”不为过吧?为什么要这样做呢?为了
提速度、省内存、显实力。
总之,更高、更快、更强。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-02 06:24
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

呵呵,楼上的说的是!不过稍改一下,换用动态数组可以解决位数这个问题.倒是这个int的使用,倒是如您所说,太过铺张了,改为short 
的确好得多,谢谢了


对不礼貌的女生收钱......
2006-05-02 09:11
快速回复:求助一道题
数据加载中...
 
   



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

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