一个数 N 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数, 而 2 的个数是远远多余 5 的个数的, 因此求出 5 的个数即可 题解中给出的求解因子 5 的个数的方法是用 n 不断除以 5, 直到结果为 0, 然后把中间得到的结果累加
扩展资料
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2] 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等
无语
public class jjjj {
int pp(int n)
{
if(n<2)
return 1n;
else
return npp(n-1);
}
public static void main(String args[])
{
jjjj b=new jjjj();
int d=bpp(5);
Systemoutprint(d);
}
}
阶乘就是利用递归啊。
整个程序的核心就是int pp(int n)
{
if(n<2)
return 1n;
else
return npp(n-1);
}
这一段, 如果n大于2,返回npp(n-1)的意思,就是,任何一个N的阶乘等于n比n小1的数的阶乘,打个比方,比如5的阶乘等于5(4的阶乘),4的阶乘等于4(3的阶乘),而1的阶乘,等于1本身。
import javautilScanner;
public class Test {
public static void printArr(int[] arr){
for(int i=0;i<arrlength;i++)
Systemoutprint(arr[i]);
}
public static void printArrRev(int[] arr){
for(int i=arrlength-1;i>=0;i--)
Systemoutprint(arr[i]);
}
public static int[] shift(int[] arr, int num){
int[] result = new int[arrlength+num];
for(int i=0;i<arrlength;i++){
result[i+num] = arr[i];
}
return result;
}
public static int getDigit(int num){
int result = 0;
int number = num;
while(number!=0){
number = number/10;
result++;
}
return result;
}
// public static int[] isopsephy(int[] arr){
// int iso_number = 0;
// int[] result;
// for(int i=arrlength-1;i>=0;i--){
// iso_number = (arr[i]+iso_number)/10;
// }
// int digit = getDigit(iso_number);
// result = new int[arrlength+digit];
// for(int i=digit-1;i>=0;i--){
// result[i] = iso_number%10;
// iso_number = iso_number/10;
// }
// iso_number = 0;
// for(int i=arrlength-1;i>=0;i--){
// result[i+digit] = (arr[i]+iso_number)%10;
// iso_number = (arr[i]+iso_number)/10;
// }
// return result;
// }
// public static int[] isopsephy(int arr){
// int temp= arr;
// int[] result;
// int digit = getDigit(arr);
// result = new int[digit];
// for(int i=digit-1;i>=0;i--){
// result[i] = temp%10;
// temp = temp/10;
// }
// return result;
// }
public static int[] isopsephy(int[] arr){
int iso_number = 0;
int[] result;
for(int i=0;i<arrlength;i++){
iso_number = (arr[i]+iso_number)/10;
}
int digit = getDigit(iso_number);
result = new int[arrlength+digit];
for(int i=0;i<digit;i++){
result[i+arrlength] = iso_number%10;
iso_number = iso_number/10;
}
iso_number = 0;
for(int i=0;i<arrlength;i++){
result[i] = (arr[i]+iso_number)%10;
iso_number = (arr[i]+iso_number)/10;
}
return result;
}
public static int[] isopsephy(int arr){
int temp= arr;
int[] result;
int digit = getDigit(arr);
result = new int[digit];
for(int i=0;i<digit;i++){
result[i] = temp%10;
temp = temp/10;
}
return result;
}
public static int[] add(int[] arr, int[] addnum){
int[] arr_short = isopsephy(arr);
int[] arr_long = isopsephy(addnum);
if(arr_shortlength>arr_longlength){
int[] temp;
temp = arr_short;
arr_short = arr_long;
arr_long = temp;
}
for(int i=0;i<arr_shortlength;i++){
arr_long[i] +=arr_short[i];
}
return isopsephy(arr_long);
}
public static int[] multi(int[] arr, int multiplier){
int[] result = new int[arrlength];
for(int i=0;i<arrlength;i++){
result[i] = arr[i]multiplier;
}
return isopsephy(result);
}
public static int[] getMult(int[] arr, int[] multipliers){
int[] result = new int[arrlength];
int[] first = isopsephy(arr);
int[] second = isopsephy(multipliers);
for(int i=0;i<secondlength;i++){
result = add(result,shift(multi(first, second[i]),i));
result = isopsephy(result);
}
return result;
}
public static void main(String[] args){
Scanner sca = new Scanner(Systemin);
Systemoutprintln("Please input n:");
int n = scanextInt();
int[] result = isopsephy(n);
for(int i=n-1;i>0;i--){
result = getMult(result, isopsephy(i));
}
printArrRev(result);
}
}
一开始写成数组从高位到低位了,注释掉了。
class Factorial{
private long sum;
Factorial(int x){
sum=1;
for(int n=1;n<=x;n++)
{
sum=n;
}
}
public static void main(String[] args){
Factorial obj=new Factorial(3);
Systemoutprintln("3的阶乘为:"+objsum);
}
}
以上就是关于java实例 N的阶乘末尾有多少个0全部的内容,包括:java实例 N的阶乘末尾有多少个0、java n的阶乘、java求n的阶乘,用数组做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)