1 条题解

  • 0
    @ 2026-6-19 10:30:06

    📝 题目大意

    给定一个 100999100 \sim 999 的整数 NN,输出其十位和个位数字(即末尾两位),若十位为 00 也需保留(如 101101 输出 01)。

    💡 解题思路

    1. 题目分析N[100,999]N \in [100, 999],只有三位数。核心是取后两位并保留前导零。
    2. 算法推导
      • 若用整数取模 N % 100,当结果为一位数(如 1011101 \to 11000100 \to 0)时需额外用 printf("%02d") 格式化补零,比较麻烦。
      • 直接以 字符串 读入,则天然保留前导零。对于三位数,后两位即 s[1]s[2](下标从 0 开始);若输入恰好是两位数(如边界情况),后两位即 s[0]s[1]
    3. 边界与细节
      • N=100N = 100 时,s[1]s[2]"00",正确。
      • N=101N = 101 时,输出 "01" 而非 "1",字符串方案天然满足。
      • 代码中 else if 分支覆盖了可能出现的两位数输入,确保鲁棒性。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅读取字符串并输出两个字符。
    • 空间复杂度O(1)O(1),存储一个长度不超过 33 的字符串。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	string s;
    	cin >> s;
    	// 读取整个整数作为字符串,便于直接取子串,天然处理前导零问题
    	if(s.size() == 3)        // N 是三位数(题目保证 100 ≤ N ≤ 999)
    		cout << s[1] << s[2]; // 输出后两位(十位和个位)
    	else if(s.size() == 2)   // 鲁棒处理:若输入为两位数,也输出后两位
    		cout << s[0] << s[1];
    	return 0;
    }
    
    • 1

    信息

    ID
    608
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者