这是我的Java程序,它应该打印给定限制之间的氖数。如果一个数字的平方的所有数字之和等于输入的数字,则称该数字为氖。
示例
9 = 81
广场8 + 1 = 9
之和
有人能解释一下我目前的实现有什么问题吗?
这是我的程序
import java.util.*;
class neon
{
public static void main(String args[])
{
Scanner me = new Scanner(System.in);
System.out.print(" What's about the lower limit ? ");
int l=me.nextInt();
System.out.println();
System.out.print(" What's about the upper limit ? ");
int h=me.nextInt();
System.out.println();
int sum=0;
for(int i=l;i<=h;i++)
{
int ii=i*i;
for(int j=0;j<3;j++)
{
int a=ii%10;
ii=ii/10;
sum=sum+a;
if(sum==i)
{
System.out.println(i+"t");
break;
}
}
}
}
}
这对我有效,试试看,让我知道:
import java.util.*;
class neon
{
public static void main(String args[])
{
Scanner me = new Scanner(System.in);
System.out.print(" What's about the lower limit ? ");
int l=me.nextInt();
System.out.println();
System.out.print(" What's about the upper limit ? ");
int h=me.nextInt();
System.out.println();
for(int i=l;i<=h;i++)
{
int sum=0;
int ii=i*i;
while(ii!=0){
int a=ii%10;
ii=ii/10;
sum+=a;
}
if(sum==i)
{
System.out.println(i+"t");
break;
}
}
}
}
您的第二个循环for(int j=0;j<3;j++)
的上界为3,因此它不适用于大于31的数字(32*32=1024=>4位)。
此外,您需要删除break
,因为您没有测试ii
的所有数字。
- 您必须先在循环内部加sum=0
- 从第二个循环中取出if循环,并去除中断
- 建议:取循环内部的平方根长度作为上限
下面你可以找到代码
public class neon
{
public static void main(String args[])
{
Scanner me = new Scanner(System.in);
System.out.print(" What's about the lower limit ? ");
int l=me.nextInt();
System.out.println();
System.out.print(" What's about the upper limit ? ");
int h=me.nextInt();
System.out.println();
int sum;
for(int i=l;i<=h;i++)
{
sum=0;
Integer ii=i*i;
for(int j=0;j<=Integer.toString(ii).length();j++)
{
int a=ii%10;
ii=ii/10;
sum=sum+a;
}
if( sum == i )
{
System.out.println(i+"t");
}
}
}
}
我不完全确定你的代码,但我只是做了一个小测试,我认为你想把你的
int sum=0;
进入你的for循环,所以它会为你测试范围内的每个数字重置:
for(int i=l;i<=h;i++)
{
int sum=0;
int ii=i*i;
for(int j=0;j<3;j++)
{
//Your code
}
}
这至少对我有用,希望能有所帮助。