java查询未通过测试用例
问题是: DoSoD数是数字和的除数。例如,如果你 数字12,其数字之和为1+2=3。12可被3整除 因此它是一个DoSoD数。根据同样的推理,11不是一个数字 DoSoD编号,但最接近11的DoSoD编号为12。写一篇 将整数n作为输入并打印DoSoD的程序 最接近但不小于n的数字。样本输入-1 16预期 输出18样本输入20预期输出20 这是我的代码:java查询未通过测试用例,java,eclipse,algorithm,Java,Eclipse,Algorithm,问题是: DoSoD数是数字和的除数。例如,如果你 数字12,其数字之和为1+2=3。12可被3整除 因此它是一个DoSoD数。根据同样的推理,11不是一个数字 DoSoD编号,但最接近11的DoSoD编号为12。写一篇 将整数n作为输入并打印DoSoD的程序 最接近但不小于n的数字。样本输入-1 16预期 输出18样本输入20预期输出20 这是我的代码: class Dosod{ public static void main(String args[]){ Scann
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);
}
}
}
但是它没有通过测试用例。有人能帮忙吗?您需要更新您的else分支。您最近的号码可以是当前号码的前向或后向。但由于问题陈述明确指出最近值应该大于输入值。您可以编写一个简单的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;
}
正如@Inan所提到的,您需要更新您的else分支,但是您也可以通过一段时间
语句来改进您的流控制,它非常清晰,而且肯定更加优雅。还为您的研究案例添加了另一种求和方法。另外,如果您在需要时“询问”输入,这样用户就可以看到发生了什么。最后但同样重要的是(如果我太严格了,我很抱歉),如果变量名具有代表性,这是一种很好的做法,这样对程序员来说更具可读性。i、 e.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