PAT基础编程题目-6-10 阶乘计算升级版

    技术2025-02-12  15

    PAT基础编程题目-6-10 阶乘计算升级版

    题目详情

    题目地址:https://pintia.cn/problem-sets/14/problems/742

    解答

    C语言版

    #include <stdio.h> void Print_Factorial(const int N); int main() { int N; scanf("%d", &N); Print_Factorial(N); return 0; } void Print_Factorial(const int N) { if (N < 0) { printf("Invalid input\n"); return; } int number[3000] = { 0 }; //初始化全为0 int product; // 乘积 int carry; //进位 int size = 1; //记录数组中的元素个数 int flag, i; number[0] = 1; //第0位为1 for (int v = 2; v <= N; v++) { // 计算阶乘 for (i = 0; i < size; i++) { // 遍历数组 // ---核心算法:计算乘积和进位并存入数组 --- carry = 0; //进位只加一次,用完后要归0 flag = 1; //循环标志,方便随时跳出循环 while (flag) { product = number[i] * v + carry; // 每次计算乘积要加上前一次的进位 number[i] = product % 10; if (product >= 10) { //大于等于10要计算进位 carry = product / 10; i++; flag = 1; } else { flag = 0; } } } size = i; //i就可以反映当前存了多少位数 } // printf("size=%d\n", size); for (i = size-1; i >=0 ; i--) printf("%d", number[i]); }

    C++版

    #include<iostream> using namespace std; void Print_Factorial(const int N); int main() { int N; cin >> N; Print_Factorial(N); return 0; } void Print_Factorial(const int N) { if (N < 0) { cout << "Invalid input\n"; return; } int number[3000] = { 0 }; //初始化全为0 int product; // 乘积 int carry; //进位 int size = 1; //记录数组中的元素个数 int flag, i; number[0] = 1; //第0位置为1 for (int v = 2; v <= N; v++) { // 计算阶乘 for (i = 0; i < size; i++) { // 遍历数组 // ---核心算法:计算乘积和进位并存入数组 --- carry = 0; //进位只加一次,用完后要归0 flag = 1; //循环标志,方便随时跳出循环 while (flag) { product = number[i] * v + carry; // 每次计算乘积要加上前一次的进位 number[i] = product % 10; if (product >= 10) { //大于等于10要计算进位 carry = product / 10; i++; flag = 1; } else { flag = 0; } } } size = i; //i就可以反映当前存了多少位数 } cout << "size=" << size << endl; for (i = size - 1; i >= 0; i--) cout << number[i]; }

    Java版

    public class Main{ private static void Print_Factorial(final int N) { if(N<0) { System.out.println("Invalid input"); } else { int [] number = new int[3000]; // 已默认初始化全为0 int product, carry; //乘积,进位 int i; int size = 1; //记录数组中的元素个数 number[0] = 1; //第0位置为1 boolean flag = true; for (int value = 2; value <= N; value++) { // 计算阶乘 for (i = 0; i < size; i++) { // 遍历数组 // ---核心算法:计算乘积和进位并存入数组 --- carry = 0; //进位只加一次,用完后要归0 flag = true; //循环标志,方便随时跳出循环 while(flag) { product = number[i]*value + carry; // 每次计算乘积要加上前一次的进位 number[i] = product%10; if(product>=10) { //大于等于10要计算进位 carry = product/10; i++; flag = true; } else { flag = false; } } } size = i; //i就可以反映当前存了多少位数 } System.out.println("size="+size); for (i = size-1; i >= 0; i--) { System.out.print(number[i]); } } } public static void main(String[] args) { int N = 0; Scanner scanner = new Scanner(System.in); if(scanner.hasNext()) { N = scanner.nextInt(); } scanner.close(); Print_Factorial(N); } }

    创作不易,喜欢的话加个关注点个赞,谢谢谢谢谢谢!

    Processed: 0.010, SQL: 9