我和我的朋友正在AP计算机科学课程的一个实验室里工作,并决定将一个问题编码为一个高尔夫,因为完成后我们仍然有一半的课程免费。这是问题:
给定数字n,n是否可被其每个数字整除?
例如,128将通过此测试-它可以被1,2和8整除。任何具有零的数字将自动取消该数字的资格。尽管您可以使用其他语言并根据需要发布解决方案,但我们最感兴趣的是了解紧凑型人员如何用Java编写程序,因为这是我们在课堂上使用的语言。到目前为止,我们都有51。这是我当前的代码:
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.
要求
方法签名可以是任何您想要的。仅计算功能体。但是,请确保该方法返回一个布尔值,并且仅传入一个数字参数(而不是字符串)。
代码必须能够通过所有这些情况下(为了忠于原题的方向,只有布尔值true和false值计算,如果语言支持布尔值,当且仅当你的语言没有布尔变量,你可以用0表示false,用任何非零整数(最好是1或-1)表示true:
128 -> true
12 -> true
120 -> false
122 -> true
13 -> false
32 -> false
22 -> true
42 -> false
212 -> true
213 -> false
162 -> true
204 -> false
此外,我们也没算空白,可以随意做同样的,除非空白是该计划的工作必不可少的(所以在Java中的换行符不计,但之间的一个空格int
和x=1
不计。)祝你好运!
0
数字,每个数字都是它们的倍数),我想大多数答案将以一种无趣的方式变得更长,包括对其进行检查。因此,我更喜欢标题所带来的问题(按数字可整,而不是数字的倍数(不包括0))。
true
,false
还是真的/错误的值也可以吗?3.java
标签实际上并没有在这里应用,因为挑战本身与Java无关。