解题思路:输入最大即使是1000也到不了3000位数,所以声明3000长度的数组是完全足够的;特殊情况如果输入0的阶乘,也要返回0。
注意事项:如果只有一个进位变量会出现一些问题:如果在计算nums[i]之前计算好进位,就不能在这一轮使用进位了,如果在计算nums[i]后计算进位,因为nums[i]的值发生改变,所以进位的值也被改变了。使用一个旧的进位和一个新的进位能很好的避免这个问题,在计算nums[i]之前用新的进位提前存储下一轮要使用的进位,用上一轮的旧进位来计算nums[i]。
参考代码:
import java.util.Scanner; public class Main { public static int[] nums = new int[3000]; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String inputs = scanner.next(); if (Integer.parseInt(inputs) == 0) { System.out.println("0"); } char[] input = inputs.toCharArray(); for (int i = 0; i < input.length; i++) { nums[i] = input[input.length - 1 - i] - '0'; } int oldJ = 0; // 旧的进位 int newJ = 0; // 新的进位 for (int i = Integer.parseInt(inputs) - 1; i > 1; i--) { for (int j = 0; j < nums.length; j++) { newJ = (oldJ + nums[j] * i) / 10; nums[j] = (oldJ + nums[j] * i) % 10; oldJ = newJ; } } boolean b = true; // 当遇见第一个非0的数的时候,关闭开关 for (int i = nums.length - 1; i >= 0; i--) { if (nums[i] == 0 && b) { continue; } b = false; System.out.print(nums[i]); } } }
0.0分
1 人评分
不会做的浏览:873 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:375 |
C语言训练-数字母 (C语言代码)浏览:649 |
【简单计算】 (C语言代码)浏览:622 |
计算质因子 (C语言代码)浏览:702 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:467 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
数列有序 (C语言代码)浏览:931 |
生日日数 (C语言代码)浏览:1500 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:382 |