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);
}
}
}
你的代码的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了。
你根本就没有把一个数据的个位,十位,百位的数字分离出来,怎么可能算对,你应该先把每个数的各个位置上的数字分离出来,在求和为5的数字
你这个逻辑都是错的,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++;
}
}
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+" ");
}
}
}
public class lianxi4 {
public static void main(String args[]) {
int n=10;
while(n<=999) {
n++;
int ge=n%10;
int shi=n/10%10;
int bai=n/100%10;
int he=ge+shi+bai;
if(he==5) {
System.out.println("各个位之和为5的数字\t"+n+"\t"+"个位"+ge+" + 十位"+shi+" + 百位"+bai);
}
}
}
}
其实超过500就不可能和为5