思路
这个题目很简单,函数内只需要这样一串代码:return n / int(pow(10, k - 1)) % 10;
为什么呢?
我们先看看,n / int(pow(10, k - 1)) 是什么意思。
在 c++ 中,如果除号的两边都是整数,则这个除号就是整除。否则,就是正常的除法。例如,3 / 4、3 / 4.0、3.0 / 4、3.0 / 4.0 的结果分别是 0、0.75、0.75、0.75。
pow(a, b) 是一个求 的函数。
在代码中,n 和 int(pow(10, k - 1)) 的类型都是 int,所以这是一个整除运算。
的值绝对是 ,, 这样的数。
你们不妨可以试验多几次,结果会发现,n / int(pow(10, k - 1)) 就是把 n 的后 k - 1 位砍掉!
结果,n 的末位变成了原来的第 k 位!
% 这个符号,就是取一个数除以另外一个数的余数。例如,233 % 2、234 % 5、235 % 3 的结果分别是 1,4,1。
你又会发现,取这个数除以 的余数,不就是取这个数的末位吗?
而在第一个环节里,末位就已经变成了第 k 位!
于是,我们成功的用 的时间复杂度在 int 的基础上求出了 n 的第 k 位!
代码
#include <iostream>
#include <cmath>
using namespace std;
int digit(int n, int k){ // 其实,大可以不用写函数。
return n / int(pow(10, k - 1)) % 10;
}
int n, k;
int main(){
cin >> n >> k;
cout << digit(n, k);
}