二、取数位
求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;
}
答案:f(x/10,k);
本题考查递归算法。
递归有三要素:
1、明确递归终止条件; 2、给出递归终止时的处理办法; 3、提取重复的逻辑,缩小问题规模。(也称剪枝)
这种方法使用递归来把第k位后面的数删除掉,以达到x%10等于第k位的数,其中len函数就是判断x是几位数。而f函数中终止的条件是x的长度等于k,所以x的长度不等于k时,要把x删掉一位。因此 return f(x/10);
另一种方法
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[20] = {0};
int x,k;
scanf("%d%d",&x,&k);
itoa(x,a,10);
printf("%c",a[k-1]);
return 0;
}
利用iitoa函数把数字转换成字符数组。
7823

被折叠的 条评论
为什么被折叠?



