Meu amigo e eu estávamos trabalhando em um laboratório em nossa aula de Ciência da Computação da AP e decidimos codificar um dos problemas, já que ainda tínhamos metade da aula livre depois que terminamos. Aqui está a pergunta:
Dado um número n, n é divisível por cada um de seus dígitos?
Por exemplo, 128 será aprovado neste teste - é divisível por 1,2 e 8. Quaisquer números com zero desqualificam automaticamente o número. Embora você possa usar outras linguagens e publicar soluções com elas, se quiser, estamos mais interessados em ver como pessoas compactas podem criar o programa em Java, pois essa é a linguagem que usamos na classe. Até agora, nós dois temos 51. Aqui está o meu código atual:
public boolean dividesSelf(int n){for(int p=n;n%10>0;)n/=p%(n%10)>0?.1:10;return n<1;}
// 51 characters
// Breakdown:
// for(int p=n; Saves one semicolon to put declaration into for loop
// n%10>0;) Basic check-for-zero
// n/= Pretty simple, discarding one number off of n at a time
// p%(n%10)>0? If p (the given value) is not divisible by n%10 (the current digit)...
// .1:10; Divide by .1 (multiply by 10) so it fails the check next iteration. If it is divisible, divide by 10 to truncate the last digit
// return n<1 If the number was fully divisible, every digit would be truncated, and n would be 0. Else, there would still be non-zero digits.
Exigências
A assinatura do método pode ser o que você quiser. Apenas conte o corpo da função. Certifique-se, no entanto, de que o método retorne um valor booleano e passe apenas em um parâmetro numérico (não em uma string).
O código deve ser capaz de passar todos esses casos (para permanecer fiel às instruções da pergunta original, somente valores booleanos verdadeiros e falsos contam se o idioma suportar booleanos. Se e somente se o seu idioma não tiver variáveis booleanas, você pode representar false com 0 e true com qualquer número inteiro diferente de zero (de preferência 1 ou -1):
128 -> true
12 -> true
120 -> false
122 -> true
13 -> false
32 -> false
22 -> true
42 -> false
212 -> true
213 -> false
162 -> true
204 -> false
Além disso, não contamos o espaço em branco, portanto, sinta-se à vontade para fazer o mesmo, a menos que o espaço em branco seja essencial para o funcionamento do programa (para que as novas linhas em Java não sejam contadas, mas um único espaço entre int
e x=1
conte). Boa sorte !
0
dígitos que é um múltiplo de cada um deles), imagino que a maioria das respostas demoraria mais de uma maneira desinteressante para incluir uma verificação. Então, eu gosto mais do problema apresentado pelo título (divisível por seus dígitos, em vez de ser um múltiplo de seus dígitos, que exclui 0).
true
efalse
ou são truthy / Falsas valores OK bem? 3. Ajava
tag não se aplica aqui, pois o desafio em si não está relacionado ao Java.