取位数
本题为2017年蓝桥杯java B组 的一个填空题,需要在横线位置填入代码,使程序得以正确运行。
package PastExam2017;
/**
@author DengMingxu
20212021年3月28日
State:solved
Hint:
对于题目中的测试数据,应该打印 5 。
请知悉分析源码,并补充划线部分缺少的代码。
注意:只提交缺失的代码,不要填写任何已有内容或说明性的文字。
public class 取数位 {
static int len(int x){
if(x<10)return 1;
return len(x/10)+1;
}
//取x的第k位数字
static int f(int x,int k){
if(len(x)-k==0)return x%10;
return ___________//填空
}
public static void main(String[] args) {
int x=23513;
System.out.println(len(x));
System.out.println(f(x,3));
}
}
Idea:
1.本题主要考究递归
2.如果要保留最右边的一位的时候应该是取余%10,但如果是要去掉最右边的一位则是除10
3.避坑:本次输出为5,f(x,3)中x为23513的时候,无论是正序还是倒序第三位都是5,
为了避坑,可以把数字改变一下再验证代码中的顺序。(如:f(3790,2)得到的结果则是7,可见是正序)
*/
public class 取数位 {
static int len(int x){
if(x<10)return 1;
return len(x/10)+1;
}
//取x的第k位数字
static int f(int x,int k){
if(len(x)-k==0)return x%10;
return f(x/10,k);//填空
}
public static void main(String[] args) {
int x=23513;
System.out.println(len(x));
System.out.println(f(x,3));
}
}