求输入一个正整数,判断其是否是一个完美数,用while循环怎么做最简洁?
完美数概念
首先你得了解什么叫”完美数“ 。一个数如果恰好等于除其本身外所有因子之和,这个数就称为“完美数” 。例如6=1+2+3.编程找出10000以内的所有完数 。所以1不算 , 循环的话就得从1开始;
解题思路
从1开始至目标数减1进行循环,逐一去判断循环数是否为目标数的因子,若是,则加总至和,最后所有数都比较完,再对和和目标数进行相等判断,如果和等于目标数 , 则是完美数,否则不是;

实现
小编用C++的方式来实现 , 因为手边没有好的Java的IDE,就,主要牵涉到的就是循环逻辑处理,跟语言没多大关系 , 所以C++你也能看得懂 。
while循环实现
int target_num = 6 ;//换成你要输入的数
int sum = 0 ;//用来累加因子的和
int i = 1 ;
while (i<target_num)
{
i++ ;
//判断i是否为目标数target_num 的因子 若是因子则目标是可以被整除
if(target_num%i == 0)sum+=i ;累积因子和
}
if(sum == target_num)cout<<“是完美数”<<endl;
else cout<<“不是完美数”<<endl;

for循环实现
int target_num = 6 ;//换成你要输入的数
int sum = 0 ;用来累加因子的和
for (int i = 1; i < target_num; i++)
{
//判断i是否为目标数target_num 的因子 若是因子则目标是可以被整除
if(target_num%i == 0)sum += i ;//累积因子和
}
if(sum == target_num)cout<<“是完美数”<<endl;
else cout<<“不是完美数”<<endl;

总结
其实完美数判断起来还是比较简单的,while循环在简洁和效率上都是不如for循环的 。虽然你的问题是while怎么实现,但是建议用for循环 。
主要考的是循环和if结合使用的方式,所以这里我们从认识完美数开始,这样才能根据他是要求去转换为代码:
什么是完美数
完美数用答主自己的话来说,一个数 , 从1开始到它自己,能被它自己整除的数,加起来还等于它自己 , 就是所谓的完美数 。比喻:6 能被它整除的有:1,2,3 。
整除的数全加起来:1+2+3=6
Java实现代码的主要逻辑
好知道了什么是完美数,那么根据这个要求我们来做完美数的计算,整个实现的思路我们一步一步的来运算:
第一步:需要从控制台上输入,那么需要用到Scanner工具
Scnner sca=new Scanner(System.in);
System.out.println(“请输入一个正整数:”);
int num=sca.nextInt();//接收输入的正整数
第二步:设置循环变量和除数的累加变量
【java怎么对输入的数值循环判定】
int i=1;//因为除数是从1开始
int sum=0;//用来做当前能被整除的数的累加变量,默认是没有累加,所以为0
第三步:做当前输入的数字的从1开始到它自己本身的循环除,获取所有的能被整除的数 , 并累加;
while(i<num){
if(num%i==0){//判断当前的数,是否能被输入的数整除
sum+=i;//能整除做累加操作
}
i++;
}
第四步:累加所有的能被整除的数sum和输入的数num做比较是否相同,相同这个数就算完美数 。
if(sum==num){//判断累加的所有整除的数和输入的数是否相同
System.out.println(“是完美数”);//相同就是完美数
}else{
System.out.println(“不是完美数”);//否则就不是完美数
}
完整代码,以及输出结果

总结:那么这个题目的难度重点是要理解完美数的要求,并且知道要求之后如何去转换为代码,这个是关键点,这个点对于所有刚开始学的Java编程的小伙伴来说都是需要慢慢克服的,也没有别的什么捷径,唯一的方式就是多练 。