【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


目录
相关文章
|
29天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
29天前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
23天前
|
搜索推荐 算法 Java
手写快排:教你用Java写出高效排序算法!
快速排序(QuickSort)是经典的排序算法之一,基于分治思想,平均时间复杂度为O(n log n),广泛应用于各种场合。在这篇文章中,我们将手写一个Java版本的快速排序,从基础实现到优化策略,并逐步解析代码背后的逻辑。
30 1
|
13天前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
30 2
|
1月前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
137 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
21天前
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。
|
1月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
34 6
|
1月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
40 2
|
1月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
35 1
|
1月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
32 1