我通过循环练习有点迷失,我必须在符合以下条件的范围内打印数字:
一个数字的每个数字必须与他左边的数字 的总和相同。例如:
将打印112,因为它的所有组成部分都是他左边的数字的总和。
101不会被打印,因为0不是他左边数字的总和。
如果总和大于9,则会丢弃数十 :
我有这段代码:
{{1}}
我创建了另外两种方法,第一种方法计算数字的长度,第二种方法根据位置计算数字的值。
有什么想法吗?
答案 0 :(得分:1)
我查看了您的代码,并确定了逻辑上的一些问题,并且我已经纠正了这些问题,并通过以下代码检查是否可以了解更换器。 (请记住,因为你的变量不是英文的,所以很难理解你的逻辑)。如果下面的代码将提供您所需的结果。
public class Program {
/**
* Prints the list of numbers from desde to hasta such that the righmost
* digit of the sum of previous digits equals current digit, and that
* happens for all digits
*
* Prints a 2nd line with as many underscores as characters contains the 1st
* line
*
* If desde < 10 o the parameters make no sense, prints Err __
*
*
* @param desde
* int from (included)
* @param hasta
* int to (included)
* @return void
*/
public static void sumDigitsConsecutius(int desde, int hasta) {
int suma = 0;
int numeroSuma = 0;
for (int i = desde; i <= hasta; i++) {
int longitud = lenght(i);
int contador = 0;
suma = 0;
for (int posicion = longitud; posicion > 0; posicion--) {
numeroSuma = posicioNumber(i, posicion);
if (posicion !=longitud && suma != numeroSuma) {
break;
} else {
contador++;
}
suma = suma + numeroSuma;
//If the sum greater than 9 then position discarded
if(suma>=10){
suma=suma%10;
}
}
if (contador == longitud ) {
System.out.println(i);
}
}
}
/**
* With this method i can calculate the length of a number
*/
public static int lenght(int numero) {
int contador = 0;
while (numero > 0) {
contador++;
numero = numero / 10;
}
return contador;
}
public static int posicioNumber(int numero, int posicio) {
// Digit of n in position p
int x;
// Remove right digits from position p.
x = numero / (int) Math.pow(10, posicio - 1);
// Get the last digit.
x = x % 10;
return x;
}
public static void main(String[] args) {
sumDigitsConsecutius(1, 1000);
}
}
对于上面的类,它将给出以下输出(数字范围1-1000)
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
112
224
336
448
550
662
774
886
998