蓝桥杯练习——C++输出阶乘的最右边一位非零数
#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的求法可以用下面这个简洁有力的代码
int func2(int a){
if(a%!=)
return a%;
else
func2(a/);
}
蓝桥杯练习——C++输出阶乘的最右边一位非零数的更多相关文章
- 蓝桥杯-格子中输出-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 蓝桥杯 基础练习 BASIC-30 阶乘计算
基础练习 阶乘计算 时间限制:1.0s 内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*…*n. 算法描述 n!可能很大,而计算机能表示的整数范围有 ...
- Java实现 蓝桥杯 算法训练 多阶乘计算
试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...
- Java实现蓝桥杯VIP 算法训练 阶乘末尾
试题 算法训练 阶乘末尾 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定n和len,输出n!末尾len位. 输入格式 一行两个正整数n和len. 输出格式 一行一个字符串,表示 ...
- Java实现 蓝桥杯VIP 算法提高 阶乘差
问题描述 给定n和m以及p,保证n>=m,求(n!-m!)对p取余的结果. 输入格式 一行三个正整数n,m,p. 输出格式 一行一个非负整数表示结果. 样例输入 3 2 10 样例输出 4 数据 ...
- Java实现 蓝桥杯VIP 算法训练 阶乘末尾
问题描述 给定n和len,输出n!末尾len位. 输入格式 一行两个正整数n和len. 输出格式 一行一个字符串,表示答案.长度不足用前置零补全. 样例输入 6 5 样例输出 00720 数据规模和约 ...
- java实现第六届蓝桥杯格子中输出
格子中输出 格子中输出 stringInGrid方法会在一个指定大小的格子中打印指定的字符串. 要求字符串在水平.垂直两个方向上都居中. 如果字符串太长,就截断. 如果不能恰好居中,可以稍稍偏左或者偏 ...
- 蓝桥杯vip题阶乘计算
蓝桥杯vip题阶乘计算 详细题目 输入一个正整数n,输出n!的值. 其中n!=123*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个 ...
- 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)
X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...
随机推荐
- LeetCode 笔记系列16.3 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]
题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...
- Jsp 公用标签库
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix=" ...
- [SQL Database] 内外网数据库同步
Azure SQL Azure(十) SQL Azure Data Sync数据同步功能(上) SQL Azure(十一) SQL Azure Data Sync数据同步功能(下) 走近微软云:SQL ...
- 用于金融分析的Python包
1. NumPy:实现各种数组对象函数和傅立叶变换等等科学计算模块.2. SciPy:提供更多科学计算功能,包括矩阵,求解线性方程组,积分运算,优化等.3. matplotlib:一个跨平台的数值绘图 ...
- LeetCode_链表操作1—Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...
- 关闭linux的防火墙
有两道防火墙 第一道 iptables -L iptables -F systemctl disable firewalld 第二道 [root@python3 ~]# getenforce Enfo ...
- HttpRunner 参数化数据驱动
HttpRunner 2.0 参数化数据驱动案例,废话不说,直接上干货. 1.测试用例目录结构 api:接口集 testcases:测试用例 testsuites:测试套件 data: ...
- table添加横向滚动条
<div style="width:1000px; height:200px; overflow:scroll;"> <table border=" r ...
- DOM简介
什么是DOM? DOM 是 Document Object Model(文档对象模型)的缩写. W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容. ...
- JMS术语
Provider(MessageProvider):生产者Consumer(MessageConsumer):消费者PTP:Point to Point,即点对点的消息模型Pub/Sub:Publis ...