洛谷P1591--阶乘数码_题解
来源:互联网 发布:java工作两年工资 编辑:程序博客网 时间:2024/06/09 23:51
/*
P1591 题解
多次高精度乘低精度+循环枚举
*/
#include <cstdio>//头文件#include <cstring>//头文件int s[10001]={0},t=0,n=0//定义变量,s数组是用来存储答案的,因为答案可能会很大,所以要用高精,t表示这个数(即答案)有t位,n表示接下来要进行一次n的阶乘,即(n!)int Cheng(int n)//用来进行乘法的函数(即Cheng){ for(int i=1;i<=t;i++)//首先,先从1到n进行循环,让s数组的每一位都乘上一个n { s[i]*=n;//将s数组的第i位乘以n } for(int i=1;i<=t;i++)//从1到t进行循环(即循环s数组的每一位) { if(s[i]>9)//如果s数组的第i为需要进行进位操作 { s[i+1]+=s[i]/10;//根据满十进一的原则,那么,我们可以得到(s[i+1]+=s[i]/10) s[i]%=10;//进完位之后剩下的(也可以写成s[i]=s[i]-(s[i]/10)*10) if(i+1>t)//如果当前所在的第i位是最高位 { t++;//那么就将t加1 } } } return 0;//返回0(结束这个函数)}int main()//主函数{ int c=0;//c代表的是接下来将会有c组数据 scanf("%d",&c);//读入c(即读入接下来会有多少组数据) while(c--)//做c次循环(也可以写成for循环) { int ans=0,l=0;//初始化变量 memset(s,0,sizeof(s));//将s数组的每一位都刷成0 s[1]=1;//第一位一定要是1,因为0乘以任何数的结果都为0,所以s数组的第一位要是1 t=1;//一开始这个数只有一位(请想一想t为什么不能为0) scanf("%d %d",&n,&l);//读入n和l(表示要问n!里面有多少个l这个数字) for(int i=1;i<=n;i++)//开始求n的阶乘(即n!) { Cheng(i);//将s数组乘以i这个数字 } for(int i=t;i>=1;i--)//开始找n!里面有多少个l这个数字 { if(s[i]==l)//如果找到了一个 { ans++;//那么就将答案数加1 } } printf("%d\n",ans);//输出答案 } return 0;//结束程序}
阅读全文
0 0
- 洛谷P1591--阶乘数码_题解
- 洛谷 阶乘数码 阶乘之和
- Codevs1225八数码难题题解
- CodeM资格赛E 数码 题解
- NOIP1998P2 阶乘之和 题解
- C++_阶乘
- 大数_高精度阶乘
- codevs 1225 八数码难题 题解
- 八数码难题 (codevs 1225)题解
- [题解] 八数码问题 (哈希表+搜索)
- 【题解】[nyoj509]因子和阶乘
- 洛谷P2006--赵神牛的游戏_题解
- 洛谷P1689--方程求解_题解
- 洛谷P1297--网线切割_题解
- 洛谷P1451--求细胞数量_题解
- 递归入门_阶乘函数
- CF#205_题解
- 题解_四月十九
- CCIE-MPLS基础篇-实验手册
- 输入一个URL到页面呈现的过程
- Effective C++ 条款8:别让异常逃离析构函数
- 获取点击的option
- CCNA基础知识摘录
- 洛谷P1591--阶乘数码_题解
- -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
- 数组转换list集合问题
- 自制EIGRP配置实验大全
- mybatis入门程序
- 提高你的Python: 解释yield和Generators(生成器)
- MYNTEYE双目摄像头orb-slam & okvis demo
- 详解 mpls vpn 的实现
- jackson实现序列化的反序列化解析