知识点:数据类型转换、while循环语句、for循环、数组的使用。
1.整数位数判断
输入一个整数,输出这个整数是几位数。
运行结果:
输入:56424
输出:5
Scanner input=new Scanner(System.in);
System.out.println("输入:");
int a=input.nextInt();
int i=1;//计数器,默认为1,当用户输入数字小于10,默认1位数,不进入循环
while(a>=10){//数值大于10时,进行循环,将数值除以 10,自动忽略余数,再将结果赋值给a
a=a/10;
i++;//计数器自增长
}
System.out.println("输入的是"+i+"位数");
解题思路:将整数除以10,累积求商的次数,即为整数的位数。
简单方法:使用函数获取字符串长度,如str.length()
System.out.println("请输入一个数字");
Scanner input = new Scanner(System.in);
String a = input.next();
System.out.println("您输入的是" + a.length() + "位数");
2.正向输出整数的每一位
输入一个整数,把整数每一位分解出来。
运行结果:
输入:65894
输出:6 5 8 9 4
Scanner input = new Scanner(System.in);
System.out.println("请输入一个整数:");
int in = input.nextInt();//接收用户输入整数
String str = in+"";//将用户输入整数,转换成字符串(隐式转换)
for(int i=0;i
解题思路:将用户输入的整数转换成字符串,每个数字作为字符串的一个char,利用str.charAt(i)函数,结合for循环,输出每一个字符。第i个字符在字符串str中所占的位置,输出的是数字。
3.逆向输出整数的每一位
输入一个整数,把整数每一位分解出来。
运行结果:
输入:65894
输出:4 9 8 5 6
Scanner input=new Scanner(System.in);
System.out.println("输入:");
int a=input.nextInt();
int i;//声明变量i接收余数
while(a>=1){
i=a%10;
System.out.print(i+"\t");
a=a/10;
}
4.水仙花数判断
如果一个数的每一位的立方加起来是自己,那么它是水仙花数。
运行结果:
输入:153
输出:是水仙花数
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int a = input.nextInt();
String b=a+"";
int sum=0;
for(int i=0;i
5、输出100000以内的所有水仙花数
/*
* N:表示你要计算几位数之内的水仙花
* a[]:用来存放当前判断是否是水仙花数的每一位数
* num:当前循环数,判断num是不是水仙花
* sum:是计算num每一位的次方的和
*/
System.out.print("指定最大位数N:");
Scanner input = new Scanner(System.in);
int N = input.nextInt();
input.close();//关闭输入的流,释放内存
for (int i = 3; i <= N; i++) {
// 存储循环数的每一位,数组的长度就是从3-输入的数
int a[] = new int[i];
// 每一次循环出现的数
int num = (int) Math.pow(10, i - 1) + 1;
System.out.print(i + "位的水仙花数有:\t");
while (num <= Math.pow(10, i)) {
int sum = 0;
//该循环拿出数字的每一位
for (int j = 0; j < i; j++)
a[j] = (int) (num / Math.pow(10, j) % 10);
// 拿出数组中的每一位,做次方
for (int j = 0; j < i; j++)
sum = sum + (int) Math.pow(a[j], i);
// 判断循环中的num和做次方求和的sum是否相等
if (num == sum)
System.out.print(num + "\t");//输出水仙花数
// 将当前循环的数+1
num++;
}
System.out.print("\n");
}
解题思路:先将整数里的每一个数字分离出来,然后循环计算整数有几位数,再循环进行次方计算求和,判断是否相等。
for (int number = 100; number <= 100000; number++) { //求10到10000之间所有的素数,一个大的循环
int temp = number; //这步代码是为了让Getlength(number)不变
int sum = 0;
for (int i = 0; i < Getlength(number); i++) {
sum += Math.pow(temp % 10, Getlength(number)); //次方和相加
temp = temp / 10;
}
if (sum == number) { //判断是否相等
System.out.print(number+" ");
}
}
}
static int Getlength(int number) { //这个函数是为了求一个数字的位数
int i = 0;
while (number / 10 > 0) {
i++;
number /= 10;
}
return i + 1;