JAVA算法习题集合—第一阶段3:基础算法练习之水仙花数判断

版权声明:王迪 https://blog.csdn.net/dnruanjian/article/details/83855227

知识点:数据类型转换、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<str.length();i++){//循环输出字符串中的每一个字符
			System.out.print(str.charAt(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<b.length();i++){
			int c=b.charAt(i)-'0';//将char转换成int类型
			sum=c*c*c+sum;
		}
		if(sum==a){
			System.out.println("是水仙花数");
		}

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;

猜你喜欢

转载自blog.csdn.net/dnruanjian/article/details/83855227