解题思路:输入最大即使是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 人评分
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:724 |
字符串对比 (C语言代码)浏览:1471 |
WU-蓝桥杯算法提高VIP-Quadratic Equation (C++代码)浏览:1808 |
WU-图形输出 (C++代码)浏览:836 |
WU-判定字符位置 (C++代码)浏览:1471 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
核桃的数量 (C语言代码)浏览:726 |
有关字符,字符串的输入输出函数说明浏览:498 |
DNA (C语言代码)浏览:798 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:721 |