#include<iostream>
#include<iomanip>
using namespace std;
#define M 10000
#define N 10000
int p=;
int func2(int a);
void func(int *a,int n)
{
int i,j,k;
for(j=;j<=n;j++)
{
k=;
for(i=;i<p;i++)
a[i]*=j;
for(i=;i<p;i++)
{
a[i]+=k;
k=a[i]/M;
a[i]%=M;
}
if(k)
{
p++;
a[p-]+=k;
}
}
//cout<<a[p-1];
int tempnum=;
for(int i=;i<p-;i++)
{
if(a[i]!=)
{ cout<<a[i]<<endl;
tempnum=a[i];
cout<< func2(tempnum)<<endl;
break;
}
}
} int func2(int a){ //取非零数
if(a%!=)
return a%;
else
func2(a/); }
int main()
{
int a[N]={},n,i;
while(cin>>n)
{
for(i=;i<N;i++)
a[i]=;
a[]=;p=;
func(a,n);
}
return ;
}

初学C++时我们求阶乘用的是经典的递归方法,非常简单。但是假如我们要求一个稍微大一点的数,例如13的阶乘,这时候问题就来了。

我们知道unsigned int   的范围是0~4 294 967 295 ,而13的阶乘6 227 020 800 已经超出了int的范围。即使是unsigned long long 的取值范围也才

0~18 446 744 073 709 551 615,而22!的值已经是1.1240007277776 * 10 21

求大数阶乘的程序网上有很多,多是模拟手工计算的方法(创建一个数组,数组中数据超过10000时进位),我们的问题是如何取到阶乘的最右边一位非零数。

这里包含两个需要计算的数据

  1. 所求阶乘的最后一组数据。
  2. 取到非零位

1的求法我们可以用大数阶乘的程序,只要在输出时只输出最右边非零的那个数组就可以了。

2的求法可以用下面这个简洁有力的代码

int func2(int a){
if(a%!=)
return a%;
else
func2(a/);
}

蓝桥杯练习——C++输出阶乘的最右边一位非零数的更多相关文章

  1. 蓝桥杯-格子中输出-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. 蓝桥杯 基础练习 BASIC-30 阶乘计算

    基础练习 阶乘计算   时间限制:1.0s   内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*…*n. 算法描述 n!可能很大,而计算机能表示的整数范围有 ...

  3. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  4. Java实现蓝桥杯VIP 算法训练 阶乘末尾

    试题 算法训练 阶乘末尾 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定n和len,输出n!末尾len位. 输入格式 一行两个正整数n和len. 输出格式 一行一个字符串,表示 ...

  5. Java实现 蓝桥杯VIP 算法提高 阶乘差

    问题描述 给定n和m以及p,保证n>=m,求(n!-m!)对p取余的结果. 输入格式 一行三个正整数n,m,p. 输出格式 一行一个非负整数表示结果. 样例输入 3 2 10 样例输出 4 数据 ...

  6. Java实现 蓝桥杯VIP 算法训练 阶乘末尾

    问题描述 给定n和len,输出n!末尾len位. 输入格式 一行两个正整数n和len. 输出格式 一行一个字符串,表示答案.长度不足用前置零补全. 样例输入 6 5 样例输出 00720 数据规模和约 ...

  7. java实现第六届蓝桥杯格子中输出

    格子中输出 格子中输出 stringInGrid方法会在一个指定大小的格子中打印指定的字符串. 要求字符串在水平.垂直两个方向上都居中. 如果字符串太长,就截断. 如果不能恰好居中,可以稍稍偏左或者偏 ...

  8. 蓝桥杯vip题阶乘计算

    蓝桥杯vip题阶乘计算 详细题目 输入一个正整数n,输出n!的值. 其中n!=123*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个 ...

  9. 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)

    X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...

随机推荐

  1. 日期选择时两个日期之间的动态控制--My97datepicker日期选择控件

    实现效果:如果先选离店日期,再选入住日期的话,入住日期大于离店日期则离店日期+1天否则离店日期不变,先选入店再选离店离店,离店只能选之后的日期,且两个日期之间最多间隔88天 <div class ...

  2. 160303、js加密跟后台加密对应

    md5.js var hexcase = 0; var b64pad = ""; var chrsz = 8; function hex_md5(s){ return binl2h ...

  3. oracle导入导出 dmp文件

    oracle导入导出 dmp文件: 打开cmd窗口,在cmd窗口下,按照个人需要输入以下对应的命令: 1.imp 用户名/密码@网络服务名 file=XXX.dmp fromuser=XXX tous ...

  4. java开源模板引擎

      Velocity  Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义 ...

  5. If the parts of an organization (e.g., teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the r

    https://en.wikipedia.org/wiki/Conway%27s_law

  6. Ubuntu下载及安装

    Ubuntu(友帮拓.优般图.乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于DebianGNU/Linux,支持x86.amd64(即x64)和ppc架构,由全球化 ...

  7. 如何使用 libtorch 实现 AlexNet 网络?

    如何使用 libtorch 实现 AlexNet 网络? 按照图片上流程写即可.输入的图片大小必须 227x227 3 通道彩色图片 // Define a new Module. struct Ne ...

  8. CF#301 B:School Marks(贪心)

    B:School Marks 有n个测试,已经完成了k个,每个测试得分为a[i],接下来的分数不知道,让我们求出任何一个满足题意的即可,满足题意就是n个测试的得分总和<=x, 中位数>=y ...

  9. wait_event族函数浅析

    2017-06-03 周末闲暇无事,聊聊内核中的wait_event*类函数的具体实现,等待事件必定涉及到某个条件,而这些函数的区别主要是等待后唤醒的方式……直奔主题,上源码 wait_event_i ...

  10. HttpRunnerManager平台异步生成及展示代码覆盖率报告

    ant+jacoco+jenkins+HttpRunnerManager代码覆盖率统计平台搭建 实现思路通过jenkins构建,并使用HttpRunnerManager异步实现报告更新与展示. 现在整 ...