【发布时间】:2016-09-29 01:14:51
【问题描述】:
所以我正在做这个练习,我的老师说他想要方法中的这一行中的 num/10:System.out.print(numDigits(num/10));(这样如果原始数字是 0,那么它将返回 1 位而不是 0) ,但我不知道他想要哪里。
(*必须用递归来计算数字的位数)
对我来说,这种方式很简单,但我想如果你写了很多代码,你不想继续输入 x/10。
import java.util.*;
public class NumDigits
{
public static void main(String[]args)
{
int num;
Scanner input = new Scanner(System.in);
num = input.nextInt();
input.close();
System.out.print(numDigits(num/10));
}
public static int numDigits(int x)
{
if (x == 0)
{return 1;}
else
{
return 1 + numDigits(x/10);
}
}
}
我想我可以做到这一点,但它需要更多的代码......:/
import java.util.*;
public class NumDigits
{
public static void main(String[]args)
{
int num;
Scanner input = new Scanner(System.in);
num = input.nextInt();
input.close();
System.out.print(numDigits(num, num));
}
public static int numDigits(int x, int num)
{
if (num == 0)
{return 1;}
else if (x == 0)
{return 0;}
else
{
return 1 + numDigits(x/10, num);
}
}
}
【问题讨论】:
-
你能澄清你在问什么吗?
-
一个很好的单元测试代码,一些0、1、15、20、100等的测试可能会帮助你设计一个好的算法。提示
Math.log可能会提供一个聪明的方法;) -
我告诉我的老师,用 num/10 调用方法而不是在方法中添加更多代码更简单(这样 0 就不会有 0 位),但他说“你是对的在那里,主要方法中没有 num/10,而是在递归方法中"