考题:求1到n之间能被5整除的所有数的乘积可以用递归 从键盘输入一个数n,求1到n之间能被5整除的所有数的乘积可以用递归。第一个答对的就给分。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package jdsTutorial;import java.util.Scanner;public class T03 { public static void main(String[] args) { System.out.print("请输入一个数N:"); long n = 0; Scanner is1 = new Scanner(System.in); try{ n = is1.nextLong(); } catch(java.util.InputMismatchException e) { System.out.print("输入错误"); return; } if(n<5) System.out.print("输入太小"); else System.out.print(calc(n)); } private static long calc(long n){ if(n<1) return 1; else if(n%5==0) return calc(n-1)* n; else return calc(n-1); } } int f(int n){ if(n==0) return 1; if(n%5==0) return n*f(n-1); return 1*f(n-1);} n=5 5n=6 5n=7 5n=8 5n=9 5n=10 50n=11 50n=12 50n=13 50n=14 50n=15 750n=16 750n=17 750n=18 750n=19 750n=20 15000n=21 15000n=22 15000n=23 15000n=24 15000n=25 375000n=26 375000n=27 375000n=28 375000n=29 375000n=30 11250000n=31 11250000n=32 11250000n=33 11250000n=34 11250000n=35 393750000n=36 393750000n=37 393750000n=38 393750000n=39 393750000对不起只能算到39 int f(int n){ return (n<5)?0:fn(n,5);}int fn(int n,int i){ if(n<i) return 1; if(n==i) return i; return i*fn(n,i+5);} import java.util.*;public class Plus { public static void main(String[] args) { System.out.print("请输入一个数N:"); long n=0; while(true) { try { Scanner is1 = new Scanner(System.in); n = is1.nextLong(); } catch(Exception e) { System.out.print("输入错误"); } if(n<5) System.out.print("输入太小"); else System.out.print(cal(n)); } } private static long cal(long n){ if(n<1) return 1; else if(n%5==0) return cal(n-1)* n; else return cal(n-1); } } long n=30; long i=1; long count=0; long val=1; while(count<=n&&(count=i*5)<=n){ val*=count; i++; } System.out.println(val); int val = 1;for(int i=1;i<=n;i++){ if(i%5 == 0){ val = val * i; }}System.out.print(val); 两个建议:1、不要用递归,能被5整除的只能是个位数为0或5的数,在循环里算就可以2、用BigInteger类,因为像这种类似于阶乘的连乘,很容易越界 两个建议:1、不要用递归,能被5整除的只能是个位数为0或5的数,在循环里算就可以楼主要求的2、用BigInteger类,因为像这种类似于阶乘的连乘,很容易越界好建议!====================== Tomcat用eclipse自带的调试工具只能run,不能debug 关于Array请大家帮我解释一下!谢谢! 大家能不能帮我一个忙? java程序如何读取远程机器上的文件内容内容? 【推荐】新版的张孝祥IT课堂java视频 基础啊,基础!盼解答! java用jxl获取excel数据。 关于使用TEXTPAD的问题,这句话是什么意思? 为什么没人理我的问题?就因为我给的分低吗?你们这些高手也太见钱眼开了吧 为什么代码没错 背景没有变? 怎么我连接数据库老报错啊? java 怎么 png转jpg
public static void main(String[] args) {
System.out.print("请输入一个数N:");
long n = 0;
Scanner is1 = new Scanner(System.in);
try{
n = is1.nextLong();
}
catch(java.util.InputMismatchException e)
{
System.out.print("输入错误");
return;
}
if(n<5)
System.out.print("输入太小");
else
System.out.print(calc(n));
}
private static long calc(long n){
if(n<1)
return 1;
else if(n%5==0)
return calc(n-1)* n;
else
return calc(n-1);
}
}
{
if(n==0) return 1;
if(n%5==0) return n*f(n-1);
return 1*f(n-1);
}
n=6 5
n=7 5
n=8 5
n=9 5
n=10 50
n=11 50
n=12 50
n=13 50
n=14 50
n=15 750
n=16 750
n=17 750
n=18 750
n=19 750
n=20 15000
n=21 15000
n=22 15000
n=23 15000
n=24 15000
n=25 375000
n=26 375000
n=27 375000
n=28 375000
n=29 375000
n=30 11250000
n=31 11250000
n=32 11250000
n=33 11250000
n=34 11250000
n=35 393750000
n=36 393750000
n=37 393750000
n=38 393750000
n=39 393750000
对不起只能算到39
{
return (n<5)?0:fn(n,5);
}
int fn(int n,int i)
{
if(n<i) return 1;
if(n==i) return i;
return i*fn(n,i+5);
}
public class Plus
{
public static void main(String[] args)
{
System.out.print("请输入一个数N:");
long n=0;
while(true)
{
try
{
Scanner is1 = new Scanner(System.in);
n = is1.nextLong();
}
catch(Exception e)
{
System.out.print("输入错误");
}
if(n<5)
System.out.print("输入太小");
else
System.out.print(cal(n));
}
}
private static long cal(long n){
if(n<1)
return 1;
else if(n%5==0)
return cal(n-1)* n;
else
return cal(n-1);
}
}
long i=1;
long count=0;
long val=1;
while(count<=n&&(count=i*5)<=n){
val*=count;
i++;
}
System.out.println(val);
for(int i=1;i<=n;i++){
if(i%5 == 0){
val = val * i;
}
}
System.out.print(val);
1、不要用递归,能被5整除的只能是个位数为0或5的数,在循环里算就可以
2、用BigInteger类,因为像这种类似于阶乘的连乘,很容易越界
1、不要用递归,能被5整除的只能是个位数为0或5的数,在循环里算就可以
楼主要求的
2、用BigInteger类,因为像这种类似于阶乘的连乘,很容易越界
好建议!
======================