【java_蓝桥杯算法训练 】试题 算法训练 阶乘

简介: 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5! = 1*2*3*4*5 = 120,因此5!最右边的那个非0的数字是2。再如:7! = 5040,因此7!最右边的那个非0的数字是4。请编写一个程序,输入一个整数n(n<=100),然后输出n! 最右边的那个非0的数字是多少。  输入格式:输入只有一个整数n

 试题 算法训练 阶乘

资源限制

时间限制:1.0s   内存限制:512.0MB


问题描述

  一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5! = 1*2*3*4*5 = 120,因此5!最右边的那个非0的数字是2。再如:7! = 5040,因此7!最右边的那个非0的数字是4。请编写一个程序,输入一个整数n(n<=100),然后输出n! 最右边的那个非0的数字是多少。

  输入格式:输入只有一个整数n。

  输出格式:输出只有一个整数,即n! 最右边的那个非0的数字。


输入输出样例

样例输入

6

样例输出

2

分析:

题目的要求是计算计算阶乘的结果从右到左数不是0的数,直接输出就可以了,但是大家都应该知道阶乘值太大了,int、long根本就存储不下,这是我们就应该想到一个对象BigInteger来完成阶乘的计算,计算完毕后赋给一个字符串,通过for循环倒叙遍历然后找到第一个不为0的值并输出即可。会使用到BigInteger的multiply()方法对数值进行乘法。然后转换为String字符串,for遍历charAt()进行对字符串取出在if进行判断是否为0,是则break跳出循环。

看代码详细解释:

试题 算法训练 阶乘

资源限制

时间限制:1.0s   内存限制:512.0MB


问题描述

  一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5! = 1*2*3*4*5 = 120,因此5!最右边的那个非0的数字是2。再如:7! = 5040,因此7!最右边的那个非0的数字是4。请编写一个程序,输入一个整数n(n<=100),然后输出n! 最右边的那个非0的数字是多少。

  输入格式:输入只有一个整数n。

  输出格式:输出只有一个整数,即n! 最右边的那个非0的数字。


输入输出样例

样例输入

6


样例输出

2


分析:

题目的要求是计算计算阶乘的结果从右到左数不是0的数,直接输出就可以了,但是大家都应该知道阶乘值太大了,int、long根本就存储不下,这是我们就应该想到一个对象BigInteger来完成阶乘的计算,计算完毕后赋给一个字符串,通过for循环倒叙遍历然后找到第一个不为0的值并输出即可。会使用到BigInteger的multiply()方法对数值进行乘法。然后转换为String字符串,for遍历charAt()进行对字符串取出在if进行判断是否为0,是则break跳出循环。

看代码详细解释:

import java.util.Iterator;
import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    char arr[][]=new char[2*n-1][2*n-1];
    //arr[n-1][n-1];为中心
    for (int i = 0; i < 2*n-1; i++) {
      for (int j = 0; j < 2*n-1; j++) {
        arr[i][j]='.';
      }
    }
    char c=(char) (64+n);
    arr[n-1][n-1]=c;
    //西北
    for (int i = n-2; i>-1; i--) {
      arr[i][i]=(char) (arr[i+1][i+1]-1);
    }
    //东南
    for (int i = n; i<2*n-1; i++) {
      arr[i][i]=(char) (arr[i-1][i-1]-1);
    }
    //东北
    int u=n;
    for (int i = n-2; i>=0; i--) { 
      arr[i][u]=(char) (arr[i+1][u-1]-1);
      u++;
    }
    //西南
    int k=n-2;
     for (int i = n;i<2*n-1; i++) {
     arr[i][k]=(char) (arr[i-1][k+1]-1);
     k--;
  }
     //正北
     for (int i = n-2; i >-1; i--) {
    arr[i][n-1]=(char) (arr[i+1][n-1]-1);
  }
     //正南
     for (int i = n; i<2*n-1; i++) {
    arr[i][n-1]=(char) (arr[i-1][n-1]-1);
  }
     //正东
     for (int i = n; i <2*n-1; i++) {
    arr[n-1][i]=(char) (arr[n-1][i-1]-1);
    }
     //正西
     for (int i = n-2; i>=0; i--) {
    arr[n-1][i]=(char) (arr[n-1][i+1]-1);
  }
     for (int i = 0; i < 2*n-1; i++) {
        for (int j = 0; j <2*n-1 ; j++) {
          if(arr[i][j]!=' ')
          System.out.print(arr[i][j]);
        }
        System.out.println();
      }
  }
  }

image.gif


目录
相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
79 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
4月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
4月前
|
搜索推荐 算法 Java
手写快排:教你用Java写出高效排序算法!
快速排序(QuickSort)是经典的排序算法之一,基于分治思想,平均时间复杂度为O(n log n),广泛应用于各种场合。在这篇文章中,我们将手写一个Java版本的快速排序,从基础实现到优化策略,并逐步解析代码背后的逻辑。
158 1
|
2月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
66 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
2月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
33 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
26天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
111 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
2月前
|
算法 Java C++
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
|
2月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
110 0
下一篇
无影云桌面