程序可以运行,但是逻辑有错,求指点,谢谢!代码如下:有帮助可追加悬赏!publicclassT{publicstaticfinalintrange=100;//100以内的数publicstaticintsumPos=0;//该数的各个位上的数...
程序可以运行,但是逻辑有错,求指点,谢谢!
代码如下:有帮助可追加悬赏!
public class T
{
public static final int range=100;//100以内的数
public static int sumPos=0;//该数的各个位上的数字加和
public static int sumFac=0;//每个因数的各个位加和
public static int count=0;//统计有多少个史密斯数
public static boolean isPrime(int x)//判断是不是素数(用于因式分解)
{
for(int i=2;i<=Math.sqrt(x);++i){
if(x%i==0){
return false;
}
}
return true;
}
public static void sumOfFactors(int x){//因式分解
for(int i=2;i
if(isPrime(i)){//如果该数是素数
if(x%i==0){//而且x能够被这个数整除
sumFac+=i/100+i%100/10+i%100%10/1;//那么i是x的一个因式,对这个i各个位加和
sumOfFactors(x/i);//被i因式分解后剩下的x/i继续递归调用
break;
}
}
}
}
public static void main(String[] args)
{
for(int i=2;i<=50;++i){
sumFac=0;
sumPos=i/100+i%100/10+i%100%10/1;//计算原始数据各个位的和
sumOfFactors(i);//因式分解,并把各个因式的各个位加和放到sumFac属性中
if(sumFac==sumPos){//如果它俩相等,那么这个数是个史密斯数,输出该数
System.out.print(i+" ");
++count;
if(count%5==0){
System.out.println();
}
}
}
System.out.println("\n"+range+"以内共有"+count+"个Simth数!");
}
}
展开