UVA324 Factorial Frequencies 题解
2026/5/29 4:10:34 网站建设 项目流程

UVA324 Factorial Frequencies

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=5&page=show_problem&problem=260

题目描述

PDF

输入格式

输出格式

输入输出样例 #1

Solution

1. 题意

  • 输入多组数据;
  • 每组数据输入整数n ( n < 366 ) n(n<366)n(n<366),输出n ! n!n!中,数字0 ∼ 9 0\sim909出现的频次。输入0 00表示结束。

2. 分析

典型的高精度问题,可以用 Java 的 BigInteger 解决。首先利用 BigInteger 计算出1 ∼ 366 1\sim3661366的阶乘的值,然后调用其 ToString 方法转化为字符串,统计每个数字字符出现的频次,记录在一个数组中。然后针对每次查询,用O ( 1 ) O(1)O(1)的复杂度完成查询输出即可。

唯一需要注意的是控制输出格式。

3. 代码

importjava.math.*;importjava.util.*;publicclassMain{staticint[][]cnt=newint[375][12];publicstaticvoidinit(){BigIntegerinitval=newBigInteger("1");for(inti=1;i<=370;i+=1){initval=initval.multiply(BigInteger.valueOf(i));Stringstr=initval.toString();for(intj=0;j<str.length();j+=1)cnt[i][str.charAt(j)-48]+=1;}}publicstaticvoidmain(String[]args){init();Scannercin=newScanner(System.in);while(true){intn=cin.nextInt();if(n==0)return;System.out.println(n+"! --");for(inti=0;i<=4;i+=1)System.out.print(" ("+i+")"+String.format("%5d",cnt[n][i]));System.out.println();for(inti=5;i<=9;i+=1)System.out.print(" ("+i+")"+String.format("%5d",cnt[n][i]));System.out.println();}}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询