笔记本性能测试,直观感受

1. 概念阐述:

自幂数: 一个正整数N,它有X位,N的十进制表示为X110X2X3……Xx,如果有:

N = X1x + X2x + X3x + …… + Xxx

成立,则称N为X位自幂数。

2.特殊称呼

1~10位自幂数有独特的名称:

  • 一位自幂数:独身数
  • 两位自幂数:没有
  • 三位自幂数:水仙花数
  • 四位自幂数:四叶玫瑰数
  • 五位自幂数:五角星数
  • 六位自幂数:六合数
  • 七位自幂数:北斗七星数
  • 八位自幂数:八仙数
  • 九位自幂数:九九重阳数
  • 十位自幂数:十全十美数
3.题目要求
  • java语言输出1-10位的自幂数
4.视频直观演示

1~10位自幂数的输出

程序运行总耗时5000多秒,差不多一个半小时,压缩差不多五倍呈现成上面那种。

5.程序展示
import java.util.Scanner;

public class Self{
	public static void main(String[] args) {
		/**
		 * 由题目四得到扩展:
		 * 		水仙数其实只是"自幂数"的一种:
		 * 		一位自幂数:独身数
		 * 		二位自幂数:没有
		 * 		三位自幂数:水仙花数
		 * 		四位自幂数:四叶玫瑰数
		 * 		五位自幂数:五角星数
		 * 		六位自幂数:六合数
		 * 		七位自幂数:北斗七星数
		 * 		八位自幂数:八仙数
		 * 		九位自幂数:九九重阳数
		 * 		十位自幂数:十全十美数
		 */
		Scanner scanner = new Scanner(System.in);
		//我们想来一个循环,可以反复询问想得到的自幂数
		int loopInt = 0;//=0是循环的条件
		int sum = 0;//各个位数的和

		illegal://不合法就退出while,不循环计算浪费时间
		while(loopInt == 0){
			// sum = 0;//sum要归零

			// System.out.print("请输入1~10中的一个数字,表明你想得到“x位自幂数” : ");
			// int choice = scanner.nextInt();//输入选择多少的自幂数
		for(int choice = 1; choice <=11; choice++){//输出1-10位的自幂数,注销此句,使用上面两个可以用户输入决定
			// 采用switch来进行一个名称的匹配
			switch(choice){
				case 1 :
					System.out.println("你想得到的" + choice + "位自幂数叫“独身数”");
					System.out.print("它们分别是:");
					break;
				case 2 :
					System.out.println("不存在两位的自幂数");
					break;
				case 3 :
					System.out.println("你想得到的" + choice + "位自幂数叫“水仙花数”");
					System.out.print("它们分别是:");
					break;
				case 4 :
					System.out.println("你想得到的" + choice + "位自幂数叫“四叶玫瑰数”");
					System.out.print("它们分别是:");
					break;
				case 5 :
					System.out.println("你想得到的" + choice + "位自幂数叫“五角星数”");
					System.out.print("它们分别是:");
					break;
				case 6 :
					System.out.println("你想得到的" + choice + "位自幂数叫“六合数”");
					System.out.print("它们分别是:");
					break;
				case 7 :
					System.out.println("你想得到的" + choice + "位自幂数叫“北斗七星数”");
					System.out.print("它们分别是:");
					break;
				case 8 :
					System.out.println("你想得到的" + choice + "位自幂数叫“八仙数”");
					System.out.print("它们分别是:");
					break;
				case 9 :
					System.out.println("你想得到的" + choice + "位自幂数叫“九九重阳数”");
					System.out.print("它们分别是:");
					break;
				case 10 :
					System.out.println("你想得到的" + choice + "位自幂数叫“十全十美数”");
					System.out.print("它们分别是:");
					break;
				default :
					System.out.println("您输入的不是1~10的整数,无法判断");
					break illegal;//不合法就直接退出while循环,而不是switch循环


			}

			//上面水仙花数,所有关于三位的判断,全部换成可根据choice改变的变量
			//这次我们要循环判断一个范围,来找出这个范围内的所有自幂数
			int range = (int)Math.pow(10,(choice - 1));//1=10^(1-1)
			//range = 1 		10 		100 	1000 	10000 ……
			//   1<=范围<10  10<=范围<100
			  
			// for(range = range; range < range * 10; range++){//这就控制了范围
/*上面一行代码,我犯了致命错误,range<range*10是一个恒成立,也就是无限循环下去*/

				int rangeTail = range * 10;
				for(; range < rangeTail; range++){//这才真正控制了范围
				
				sum = 0;//每个range都要归零,而不是在while归零
				// 我们应该在一个值循环使用的位置让他归零
				// 
				for(int position = 1; position <= choice; position++){//choice就是位数
					//获得各个位的数字,逻辑在上面提过
					int pst = (range % (int)(Math.pow(10,position)))
							  /(int)(Math.pow(10,position-1));

					//各个位的choice方和,注意三位水仙花数是立方和,四位就是4次方,注意改变
					sum = sum + (int)Math.pow(pst,choice);

/*					应该在所有都加好之后再判断sum,此处逻辑错误
					if(sum == range){
						System.out.print(range + " ");//是自幂数输出就好了,控制一下间隔
					}//else 不是自幂数什么都不做
*/
				}
				if(sum == range){
						System.out.print(range + " ");//是自幂数输出就好了,控制一下间隔
				}//else 不是自幂数什么都不做

				}
			System.out.println();//输出一个换行
// 			控制是否跳出
			// System.out.print("您是否有需要继续判断的数,输入0继续,输入其他退出判断");
			// loopInt = scanner.nextInt();

		}
		}
	}
}
		
6.细节讨论

上述展示很明显看到,十位自幂数没有输出,这是因为,最大的十位数是9999999999,但是int的范围最大值是2147483647,这就导致(2147483647,9999999999]的数字超出范围,无法判断,把int换成long就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值