题解
数的分离
1 条题解
-
0
解题思路
题目要我们把一个正整数 n 的倒数第 k 个数字找出来。比如 n=1859,k=3,从右边数:个位是9(第1个)、十位是5(第2个)、百位是8(第3个),所以答案是 8。
怎么"剥离"数字呢?C++ 里有两个法宝:
n % 10:取出 n 的最后一位(个位);n / 10:把 n 的最后一位去掉(整除10)。
于是我们可以这样做:
- 先把 n 右边的前 k-1 个数字一个一个去掉(每去掉一个,n 就除以10一次);
- 剩下的最后一位,就是原来从右边数第 k 个数字;
- 用
n % 10把它取出来输出。
打个比方:数字就像一摞饼干,
/10是把最下面那块饼干拿走,%10是看看最下面那块饼干是什么味道。想看倒数第3块,就先拿走下面2块,再看最下面那一块!题目要求把这件事写成
digit()函数,主程序只需要调用它就行。参考代码
// P4606 数的分离:输出正整数n从右边数第k个数字 #include <iostream> using namespace std; // digit函数:返回n从右边数第k个数字 int digit(int n, int k) { for (int i = 1; i < k; i++) { n = n / 10; // 先去掉右边的k-1个数字 } return n % 10; // 剩下的最后一位就是要找的数字 } int main() { int n, k; cin >> n >> k; cout << digit(n, k) << endl; return 0; }复杂度分析
- 每做一次除法就去掉一位数字,一共要做 k-1 次除法,所以时间复杂度是 O(k)。
- 我们只用了几个变量,空间复杂度是 O(1)。
k 最大也就是 n 的位数,所以程序运行非常快!
- 1