说明:
虽然程序中只有一个主函数就可以解决所有问题,但仅有一个主函数的话代码存在的问题也比较多,尤其是功能越加复杂,那么主函数就会代码很多,造成内存占用过大,或者可读性降低,又或者维护成本太高,所以创建更多函数可以解决一定的问题.
1.(求一个整数各位数字之和)编写一个方法,计算一个整数各 位数字之和。使用下面的方法头:
public static int sumDigits(long n)
例如: sumDigits(234) 返回9(2+3+4)。
提示:使用求余操作符%提取数字,用除号/去掉提取出来的数字。例如:使用234%10 (=4)抽取4。然后使用234/10(=23)从234中去掉4。使用一个循环来反复提取和去掉每位数字,直到所有的位数都提取完为止。编写程序提示用户输人一个整数,然后显示这个整数所有数字的和。
import java.util.Scanner;
class Demo01{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:"); //提示用户输入一个数字
long num=scanner.nextLong();
int sum=sumDigits(num); //调用sumDigits函数
System.out.println(sum);
}
public static int sumDigits(long n){
int sum=0;
while(true){
sum+=n%10;
n/=10;
if(n==0){
return sum; //将sum返给主函数
}
}
}
}
2.(回文整数)使用下面的方法头编写两个方法:
// Return the reversal of an integer, i.e., reverse(456) returns 654
pub1ic static int reverse(int number)
// Return true if number is a palindrome
public static boolean isPalindrome(int number)
使用reverse方法实现isPalindrome。如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。
- 解题思路:根据题意有两个函数,一个是对数字进行逆向排序,一个是进行判断
import java.util.Scanner;
class Demo02{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:"); //提示用户输入一个数字
int num=scanner.nextInt();
if(isPalindrome(num)){ //将该数字传给isPalindrome得出结果,得到结果后,判断该数字是否回文
System.out.println("是回文");
}else{
System.out.println("不是回文");
}
}
public static boolean isPalindrome(int num){
return reverse(num)==num; //再将该数字传给reverse进行反序排序,排序结果跟num的相等的布尔运算结果返还给主函数
}
public static int reverse(int num){
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10; //进行反向排序
if(num==0){
return sum; //将排序结果返还给isPalindrome
}
}
}
}
3.(数学:平方根的近似求法)有几种实现Math类中sqrt方法的技术。其中一个称为巴比伦法。它通过使用下面公式的反复计算近似地得到:
nextGuess = (1lastGuess + n / lastGuess) / 2
当nextGuess和lastGuess几乎相同时,nextGuess 就是平方根的近似值。最初的猜测值可以是任意一个正值(例如1)。这个值就是lastGuess的初始值。如果nextGuess和lastGuess的差小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess就成为lastGuess,近似过程继续执行。实现下面的方法,返回n的平方根。
pub1ic static double sqrt(long n)
class Demo03{
public static void main(String[] args){
System.out.println(sqrt(9)); //将sqrt(9)的运算结果输出
}
public static double sqrt(long n){
double lastGuess=1;
double nextGuess=(lastGuess+n/lastGuess)/2;
while(true){
if(Math.abs(nextGuess-lastGuess)<0.00001){
return nextGuess; //返回给主函数
}
lastGuess=nextGuess;
nextGuess=(lastGuess+n/lastGuess)/2;
}
}
}
4.(回文素数)回文素数是指一个数同时为素数和回文数。例如: 131是一个素数,同时也是一个回文素数。数字313和757也是如此。编写程序,显示前100个回文素数。每行显示10个数并且准确对齐,数字中间用空格隔开。
- 解题思路:我们可以先从小到大找一个素数,再判断他是否回文,一直重复,直到有100个回文素数
class Demo04_06{
public static void main(String[] args){
int count=0; //表示回文素数的个数
int num=2; //表示可能的回文素数的数字 从2开始
while(true){
if(isHuiWenAndSuShu(num)){ //判断num是否回文素数
count++; //是则count+1
System.out.print(num+" ");
if(count%10==0){
System.out.println(); //当输出了十个回文素数后换行
}
}
if(count==100){
break; //到100个后停止
}
num++; //num+1继续循环
}
}
public static boolean isHuiWenAndSuShu(int num){
return isHuiWen(num)&&isSuShu(num);
}
public static boolean isHuiWen(int num){
return reverse(num)==num;
}
public static int reverse(int num){ //返回num的回文
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
return sum;
}
}
}
public static boolean isSuShu(int num){ //判断num是不是素数
for(int i=2;i<=num/2;i++){
if(num%i==0){
return false;
}
}
return true;
}
}
5.(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。例如:17是一个素数,而71也是一个素数,所以17和71是反素数。编写程序,显示前100个反素数。每行显示10个,并且数字间用空格隔开
- 解题思路:先从小到大找到素数,然后表示出他的逆向顺序,两个不一样,且逆向顺序的也是素数则输出
class Demo05{
public static void main(String[] args){
int count=0;
int num=2;
while(true){
if(isFanZhuanSuShu(num)){
count++;
System.out.print(num+" ");
if(count%10==0){
System.out.println();
}
}
if(count==100){
return;
}
num++;
}
}
public static boolean isFanZhuanSuShu(int num){ //判断是否是素数且反转后不相等且也是素数
return isSuShu(num)&&isSuShu(reverse(num))&&!isHuiWen(num);
}
public static boolean isHuiWen(int num){ //判断回文
return reverse(num)==num;
}
public static boolean isSuShu(int num){ //判断素数
for(int i=2;i<=num/2;i++){
if(num%i==0){
return false;
}
}
return true;
}
public static int reverse(int num){ //反向排序
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
return sum;
}
}
}
}