击鼓传花
来源:互联网 发布:淘宝店铺怎样修改店名 编辑:程序博客网 时间:2024/04/24 06:36
击鼓传花(flower.cpp)
明明最近经常在教室里跟同学一起玩击鼓传花的游戏,规则是第n个拿到花的小朋友必须说出n!最后一位非0 的数字,如此循环游戏,如果谁讲错了就得罚唱一支歌曲。
经过几次游戏,明明认为只要把前一个小朋友说得数字去乘以n,说出得到的数的最后一位非0的数字就可以了,可惜明明这次轮到了第15个,结果被罚了唱歌(应该是8,但是HC小朋友却说了3)。
明明不希望这样的事情再次发生,所以希望你能编写一个程序,能够计算出n!的最后一位非0的数字。
输入
输入有5行,第I(1≤i≤5)行是一个n(1≤n≤10100,10的100次幂)。
输出
输出有5行。
第I行对应输入中第I行的n的阶乘的最后一位非0的数字。
样例输入
11
12
13
14
15
样例输出
8
6
8
2
8
此题看数据范围——10的100次方!所以用高精度,先用浮点数算阶乘,再转换为字符数组
参考代码:
#include <iostream>
#include <stdlib.h>
#define N 100
using namespace std;
double f(int n) //计算阶乘
{
double s=1.0;
for(int i=1;i<=n;i++)
{
s=s*i;
}
return s;
}
char p(double s)
{
char n='0',m[N];
int i=0;
gcvt(s,101,m); //双精度浮点型转字符数组的库函数
while(m[i++]!='.');
for(int k=i-2;k>=0;k--) //求出得到的数的最后一位非0的数字
{
n=m[k];
if(n!='0')
break;
}
return n;
}
int main()
{
freopen("flower.in","r",stdin);
freopen("flower.out","w",stdout);
int n[5];
double s;
char m;
for(int i=0;i<5;i++)
cin>>n[i];
for(int i=0;i<5;i++)
{
s=f(n[i]);
m=p(s);
cout<<m<<endl;
}
}
- 击鼓传花
- 题目:《击鼓传花》
- 击鼓传花
- 击鼓传花
- 击鼓传花
- 击鼓传花
- 击鼓传花
- coro学习-击鼓传花
- 数据结构之 击鼓传花
- 动态规划:击鼓传花
- 击鼓传花(赛码网)
- ds 2.3 击鼓传花
- 动态规划:击鼓传花
- 动态规划-击鼓传花
- FOJ 1962 新击鼓传花游戏
- 第四章 击鼓传花 MySpace (二)
- 第四章 击鼓传花 MySpace (一)
- [go]go版本的击鼓传花
- 舞钢商洛郴州揭阳1383828440578
- 利川固原张掖潜江吉首如皋1383828338016
- 上海哈密阳春莱阳项城罗定1383828338317
- 使用java反射将数据库结果集转换成对象结果集
- FrameBuffer系列 之 显示图片
- 击鼓传花
- 天门宜春合肥吴忠1383828504984
- poj 1191 棋盘分割(DP)
- jQuery 与 Ajax关系
- 玉门绍兴大连昆山1383828523750
- 设计模式之单例模式
- 济源贵阳张掖宁安1383828523921
- 汉中江都宣威高州1383828527531
- 上海滕州临沧开远从化石首1383828396671