题目链接

数字颠倒

题目描述

输入一个整数 a,将这个整数的各位数字颠倒后输出。

例如,输入 123000,则输出 000321

解题思路

核心思路:字符串处理

虽然题目描述中提到了“整数”,但从示例 123000 -> 000321 我们可以看出一个关键点:数字末尾的 0 在颠倒后变成了前导 0 并且被保留了下来。

如果进行纯数学运算,一个整数 123000 颠倒后会得到 321,前导零会丢失。因此,解决这个问题的最佳方法是将其作为一个字符串来处理,而不是一个数值。

算法步骤

  1. 读取输入:将整个输入的数字序列作为字符串读入。
  2. 反转字符串:使用相应编程语言提供的内置功能来反转这个字符串。
  3. 输出结果:直接打印反转后的字符串。

这个方法可以优雅地处理所有情况,包括含有前导或后导零的数字序列。

代码

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    string s;
    cin >> s;

    reverse(s.begin(), s.end());

    cout << s << endl;

    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        StringBuilder sb = new StringBuilder(s);
        String reversedString = sb.reverse().toString();

        System.out.println(reversedString);
    }
}
import sys

def solve():
    try:
        s = sys.stdin.readline().strip()
        if not s:
            return
    except (IOError, ValueError):
        return

    # Using string slicing to reverse the string
    reversed_s = s[::-1]
    
    print(reversed_s)

solve()

算法及复杂度

  • 算法:字符串反转

  • 时间复杂度,其中 是输入数字字符串的长度。

    • 读取和反转字符串都需要线性的时间。
  • 空间复杂度

    • 需要 的空间来存储输入的字符串。