每日刷题(二十二)
蓝桥杯第八届C语言B组省赛习题
习题E:取数位
这个题需要认真分析,f(x,3)中的3需要细品,它是从左到右第三位还是从右到左第三位,我们从函数f中if(len(x)-k==0) return x%10;很显然是从左到右第三位,那么很显然5不是个位,所以我们需要考虑另一个出口,既然代码里出现了递归,那么这题很明显就是要我们递归求解。因为他要到个位才会输出,那么我们就可以让x除以10直到长度等于k,那么需要提交的代码便是
f(x / 10, k)
其实求这个的方法很多,抛开考试,这个代码还可以这么写,只要加一个库函数和库文件就行
#include<stdio.h>
#include<math.h>
// 求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 f(x / 10, k); //填空
return x / (int)pow(10,len(x)-k) % 10; //填空
}
int main()
{
int x = 23574;
printf("%d\n", f(x,3));
return 0;
}