蓝桥杯2017第八届C语言B组省赛习题题解——习题E.取数位

每日刷题(二十二)

蓝桥杯第八届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;
}
 

这是目前为止最保姆级的教程,如果喜欢我的文章,请记得三连哦,点赞关注转发,欢迎各位志同道合的IT友人在评论区讨论交流,感谢您的支持,下期更精彩!!!

发布了40 篇原创文章 · 获赞 7 · 访问量 3113

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/104660581