这就是问题:
DoSoD编号是数字和的除数。例如,如果你采取 数字12,其数字之和为1 + 2 = 3.12可被3整除 因此它是一个DoSoD号码。按照同样的理由,11不是一个 DoSoD号码,但最接近11的DoSoD号码是12.写一个 将整数n作为输入并打印DoSoD的程序 最接近但不小于n的数字。样本输入-1 16预期 输出18样本输入-2 2预期输出20
这是我的代码:
class Dosod{
public static void main(String args[]){
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int temp=0,x;
x=n;
int y=n;
while(n>0){
x=n%10;
temp+=x;
n=n/10;
}
if(y%temp==0){
System.out.print(y);
}else if(y%temp!=0){
y=y+2;
System.out.println(y);
}
}
}
但它没有通过测试用例。可以有人帮忙吗?
答案 0 :(得分:0)
您需要更新您的其他分支。您最近的号码可以是当前号码的前进或后退。但由于问题陈述明确表示最接近的值应大于输入值。您可以编写一个简单的while循环,它会增加输入值,直到值mod sumOfDigits
为0。
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int y = n;
int temp = 0;
temp = sumOfDigits(n);
if (y % temp == 0) {
System.out.print(y);
}
else
{
int yforward = y+1;
while(yforward % sumOfDigits(yforward) !=0)
yforward++;
System.out.println(yforward);
}
}
static int sumOfDigits(int n)
{
int temp = 0;
while (n > 0) {
int x = n % 10;
temp += x;
n = n / 10;
}
return temp;
}
答案 1 :(得分:0)
正如@Inan所提到的,你需要更新你的其他分支,但你也可以只用一段statement
来改善流量控制,它非常清晰,绝对更优雅。还添加了另一种方法来对您的研究案例中的数字求和。另外,如果您在需要时“询问”输入,那么很好,因此用户可以看到正在发生的事情。最后但并非不那么重要(如果我太严格,我很抱歉)如果您的变量名称具有代表性,这是一个很好的做法,这种方式对于程序员来说更具可读性。即int inputNumber = s.nextInt();
。
class Dosod{
public static void main(String args[]) {
System.out.print ( "Please enter a number: " );
Scanner s = new Scanner(System.in);
int inputNumber = s.nextInt();
while ( inputNumber % sumOfDigits ( inputNumber ) != 0 )
{
inputNumber++;
}
System.out.println ( "dosod: " + inputNumber );
}
static int sumOfDigits(int number)
{
String digits = new Integer(number).toString();
int sum = 0;
for (char c: digits.toCharArray())
sum += c - '0';
return sum;
}
}
Please enter a number: 19
Dosod: 20
Please enter a number: 12
Dosod: 12
Please enter a number: 37
Dosod: 40
如果您仍有任何疑问,请查看此工作流程: