求1个整数的第k位数字有很多种方法。
以下的方法就是一种。
// 求x用10进制表示时的数位长度
int len(int x){
if(x<10) return 1;
return len(x/10)+1;
}
// 取x的第k位数字
int f(int x, int k){
if(len(x)-k==0) return x%10;
return _____________________; //填空
}
int main()
{
int x = 23574;
printf("%d\n", f(x,3));
return 0;
}
对于题目中的测试数据,应该打印5。
请仔细分析源码,并补充划线部分所缺少的代码。
注意:只提交缺失的代码,不要填写任何已有内容或说明性的文字。
答案:
return f(x / 10 , k);
思路:
1,在f函数的if判断那里打断点,然后debug,发现程序只判断了一次数位长度是否等于k,就退出了循环(把测试数据改为574,发现输出的是4,因此题目所求的第三位,就是正着数的第三个);
2,如果要多次重复判断,就必须要重复调用f函数,因此想到了递归(要么K增大,要么len减少,但是k不能增大了【越界】);
3,由于调用的是len函数,不断的判断x的长度,由此判断x会进行变化,;
4,而且观察f函数返回的是x取10的余数(就是取个位),如果要想取到第k位的数(就必须使得第K位为个位),因此就只有对x进行除以10的操作,测试后,发现正确!
参考代码:
// 求x用10进制表示时的数位长度
int len(int x){
if(x < 10)
return 1;
return len(x / 10) + 1;
}
// 取x的第k位数字
int f(int x, int k){
int temp = len(x);
if(len(x) - k == 0)
return x % 10;
//return _____________________; //填空
return f(x / 10 , k);//不是求最后一位,则去掉最后一位
}
int main()
{
int x = 23574;
printf("%d\n", f(x, 3));
return 0;
}