所以我正在做这个练习,我的老师说他想要这行中的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)
嗯,第一次分裂很容易被删除。
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));
}
现在你的支票0仍然可以在numDigits功能中使用,甚至可以用于第一个' 0'同样。现在你需要调整的只是递归调用本身,留作练习,因为它仍然是作业。
答案 1 :(得分:1)
我假设numDigits返回数字中的小数位数
这是一个简单的解决方案:
public static int numDigits(int x) {
return Integer.toString(x).length();
}
担心locales / radix / speed / negatives?试试这个:
public static int numDigits(int x) {
if (x == 0) {
return 1;
} else {
return (int) (Math.log10(Math.abs(x))) + 1;
}
}
但是,如果需要递归:
public static int numDigits(int x) {
if (x > -10 && x < 10) {
return 1;
} else {
return numDigits(x / 10) + 1;
}
}
答案 2 :(得分:1)
使用递归方法可以通过这种方式实现SuperDigit
public class SuperDigit
{
//static int sum = 0;
public static void main(String[] args)
{
int n = 8596854;
System.out.println(sum(n));
}
static int sum (int num)
{
if (num != 0)
{
return (num % 10 + sum (num / 10));
}
else
{
return 0;
}
}
}
答案 3 :(得分:0)
为什么不这样做:
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));
}
public static int numDigits(int num)
{
if ((num/10) == 0)
{return 1;}
else
{
return 1 + numDigits(num/10);
}
}
}
这样&#34; num / 10&#34;在递归方法中不是主要方法,零问题得到解决。
答案 4 :(得分:0)
import java.util.*;
public class NumDigits
{
public static void main(String[]args)
{
long num;
Scanner input = new Scanner(System.in);
num = input.nextInt();
input.close();
System.out.print(numDigits(num));
}
public static long numDigits(long x)
{
if (x/10 == 0)
{return 1;}
else
{
return 1 + numDigits(x/10);
}
}
}
我认为它不会起作用所以我没有尝试过