2 dyi58 dyi58 于 2016.04.14 21:01 提问

JAVA 我想在10到1000之间打印各个数位之和为5的数字,这样写有什么错,新手求大神指点

public class Demo1 {
public static void main(String []args){
int n=10;
int t=n;
int sum=0;
while(t<=1000)
{
t++;
sum=sum+t%10;
t=t/10;
}
if(sum==5)
{
System.out.println("各个数位之和为5的有:"+t);
}
}
}

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.14 21:38
已采纳

你的代码的while只是统计某个数的各个位上的数值之和,但是又不太正确。正确的是需要两层循环,外层从10-1000;内层循环计算每个数的各个位数和。修正如下:

 public class Demo1 {
    public static void main(String[] args) {
        int n = 10;
        //外层循环从10-1000
        for(int i =n;i<1000;i++){
            int sum = 0;
            int t =i;
            //内层循环,计算i的每个数位上的数字和
            while (t>0) {
                sum = sum + t % 10;
                t = t / 10;
            }
            if (sum == 5) {
                System.out.println("各个数位之和为5的有:" + i);
            }
        }
    }
}

这样测试就OK了。

qq_30408111
qq_30408111   2016.04.14 21:33

你根本就没有把一个数据的个位,十位,百位的数字分离出来,怎么可能算对,你应该先把每个数的各个位置上的数字分离出来,在求和为5的数字

u013429324
u013429324   2016.04.14 21:50

你这个逻辑都是错的,1000以内包括两位数和三位数,分两种情况,两位数取个位和十位相加,三位数取个、十、百位上的数相加,再挑选和为5的数,
存入数组,用数组打印出来,或者只要满足条件就直接打印出来,不存储
你的程序中“sum=sum+t%10;”是不对的,这计算的是1~1000之间每个数其十位数之和
而且t不是数组,每循环一次,其值更新一次,你最终打印出来的只有一个值,所以判断应放在循环内。
public class Demo1 {
public static void main(String []args){
int n=10;
int t=n;
int sum=0;
System.out.println("各个数位之和为5的有:")
while(t<=1000)
{
if(t<100)
{
sum=t/10+t%10;

}else{
sum=t/100+t%(t/10)+t%10;
}
if(sum==5)
System.out.print("%d ,"+t)
t++;
}
}

chenhchen1994
chenhchen1994   2016.04.14 21:55
public class Test01 {
    public static void main(String[] args) {
        // 创建一个List,用来存放各个位数之和为5的数
        List<Integer> list = new ArrayList<Integer>();
        // 循环遍历10-1000之间的数
        for (int i = 10; i < 1000; i++) {

            // 个位数
            int a = i % 10;
            // 十位数
            int b = i / 10 % 10;
            // 百位数
            int c = i / 100;

            // 获得 个 十 百 位 之和
            int result = a + b + c;

            // 判断
            if (result == 5) {
                // 将满足条件的数放到List中
                list.add(i);
            }
        }
        // 循环遍历List
        for (int i = 0; i < list.size(); i++) {
            int  ress = list.get(i);
            System.out.print(ress+" ");
        }
    }
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!