注册 登录
编程论坛 JAVA论坛

一个新手编写求100~M的水仙花数

梦想不停 发布于 2017-04-25 11:54, 2441 次点击
package rubbit;
import java.util.*;
public class 水仙花数 {
    static int i,N=1;
     static int jf(int n1,int n2)//定义一个乘方的方法
    {       for(i=0;i<n2;i++)
            N=N*n1;
            return N;
    }
    public static void main(String args[]){
        @SuppressWarnings("resource")
        Scanner in=new Scanner(System.in);
        System.out.print("请输入一个整数(最好大于4位数)");
        int M=in.nextInt();
        int k,b,j,mod,sum=0,n=0;//n是j的位数
        for(j=100;j<=M;j++)
            {{b=j;
            do{b=b/10;
            n++;
             }
            while(b!=0);}//判断j是几位数
        for(k=0;k<n;k++)//是否为水仙花数
        {   mod=b%10;
            b=b/10;
            sum=sum+jf(mod,n);
        }n=0;
        if(sum==j)
            System.out.print(j+" ");
            }
    }
   

}看看程序哪里有错,主要是算法

[此贴子已经被作者于2017-4-25 18:57编辑过]

4 回复
#2
zsh9810229842017-04-25 15:50
int M=in.nextInt();

你输入的是 M ,和 j 有什么关系啊,你后面是在判断 j 是不是水仙花数,而不是 M


[此贴子已经被作者于2017-4-25 15:51编辑过]

#3
梦想不停2017-04-25 18:56
回复 2楼 zsh981022984
M只是提供一个范围时用到的数而已呀,是100~M之间的数用j来循环遍历并判断是不是水仙花数,有一个错误b已经是0了,下面一层循环不应该用b,但是改了还是不行

[此贴子已经被作者于2017-4-26 13:57编辑过]

#4
zsh9810229842017-04-26 22:00
上面是想当然了。。。。。

楼主有两个问题
(1)
mod=b%10;
            b=b/10;

这里的b在上面已置0
(2)
int k,b,j,mod,sum=0,n=0;

sum置0应放入第一重循环内,不然sum一直累加。。。
#5
梦想不停2017-04-26 22:20
回复 4楼 zsh981022984
sum是一个问题,后来我又发现方法的N=1应该放到方法里的括号里
1