{ }codelper
反转字符串P0252

符号不动,倒着写

我们来玩把数倒着写的游戏。
第一行给出数的个数 n,接下来 n 行每行给出一个整数。
对每个整数,把数字的顺序从最后一位到第一位倒过来,在一行中输出。
如果是负数,开头的 - 号不倒过来,仍然放在最前面(-45 → -54)。
倒过来后跑到前面的 0 也不删掉,全部写出(120 → 021,-100 → -001)。
0 仍然是 0。

输入
1 ≤ n ≤ 100。
整数大于 -10^18 且小于 10^18(最多 18 位数字)。
非零整数不以 0 开头,0 只写作 "0",不会出现 "-0"。
每行除了整数没有别的字符
输出
n 行,每行一个倒写的数(符号在最前,前面的 0 保留)
样例 1 · stdin
4
120
-45
7
-100
stdout
021
-54
7
-001
main.py
输入(stdin)

运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。

$ 就绪

请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。

其他语言怎么写?查看各语言题解 · 8 种语言题解

关键是不转成数,直接把字符串倒过来。
如果把 x % 10 收集起来重新组成数,或者像 int(s[::-1]) 那样把倒过来的结果转成数,跑到前面的 0 就会消失,120 变成 21,-100 变成 -1。
数值超过 21 亿,C、Java、C# 的 int 连读都读不进来;而 JS、TS、Craykon 的数是浮点数(double),Number("123456789012345678") 已经变成 123456789012345680。
各语言倒转的方法不同:Python s[::-1],JS/TS [...s].reverse().join("")(字符串没有 reverse,要先变成数组),Java new StringBuilder(s).reverse(),C# 先转成 char[],用 Array.Reverse 后再 new string(a),C++ std::reverse(s.begin(), s.end()),Craykon s.反转()。
C 没有倒转函数,要写一个从两端交换字符、向中间推进的循环。
符号要单独处理:如果第一个字符是 -,先把它拿开,只倒转剩下的部分(Python s[1:],Java/C# s.substring(1)·s.Substring(1),Craykon s.截取(1)),再把符号放回最前面。
C、C++ 从下标 1 开始倒转即可。
整个倒过来的话,-45 会变成 54-。

Pythonmain.py · 8 行
n = int(input())for _ in range(n):    s = input().strip()    # 수로 바꾸지 않고 문자열 그대로 뒤집는다(앞에 온 0을 지키려고)    if s[0] == "-":        print("-" + s[1:][::-1])    else:        print(s[::-1])
JavaScriptmain.js · 10 行
const [n, ...lines] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);const out = [];for (const s of lines) {  // Number로 바꾸면 2^53을 넘는 수가 바뀌고 앞의 0도 사라진다: 문자열 그대로  const neg = s.startsWith("-");  const digits = neg ? s.slice(1) : s;  const rev = [...digits].reverse().join("");  out.push(neg ? "-" + rev : rev);}console.log(out.join("\n"));
TypeScriptmain.ts · 10 行
import { readFileSync } from "node:fs";const [n, ...lines]: string[] = readFileSync(0, "utf8").trim().split(/\s+/);const out: string[] = [];for (const s of lines) {  const neg: boolean = s.startsWith("-");  const digits: string = neg ? s.slice(1) : s;  const rev: string = [...digits].reverse().join("");  out.push(neg ? "-" + rev : rev);}console.log(out.join("\n"));
JavaMain.java · 20 行
import java.io.BufferedReader;import java.io.InputStreamReader; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.parseInt(in.readLine().trim());        StringBuilder out = new StringBuilder();        for (int i = 0; i < n; i++) {            String s = in.readLine().trim();            if (s.startsWith("-")) {                out.append('-').append(new StringBuilder(s.substring(1)).reverse());            } else {                out.append(new StringBuilder(s).reverse());            }            out.append('\n');        }        System.out.print(out);    }}
C#Main.cs · 26 行
using System;using System.Text; class Program{    static string Reverse(string s)    {        char[] a = s.ToCharArray();        Array.Reverse(a);        return new string(a);    }     static void Main()    {        int n = int.Parse(Console.ReadLine().Trim());        var sb = new StringBuilder();        for (int i = 0; i < n; i++)        {            string s = Console.ReadLine().Trim();            if (s.StartsWith("-")) sb.Append('-').Append(Reverse(s.Substring(1)));            else sb.Append(Reverse(s));            sb.Append('\n');        }        Console.Write(sb);    }}
C++main.cpp · 16 行
#include <algorithm>#include <iostream>#include <string> int main() {    int n;    std::cin >> n;    for (int k = 0; k < n; k++) {        std::string s;        std::cin >> s;        // 부호가 있으면 둘째 글자부터 끝까지만 뒤집는다        auto from = (s[0] == '-') ? s.begin() + 1 : s.begin();        std::reverse(from, s.end());        std::cout << s << "\n";    }}
Cmain.c · 23 行
#include <stdio.h>#include <string.h> int main(void) {    int n;    char s[32];    scanf("%d", &n);    for (int k = 0; k < n; k++) {        scanf("%31s", s);        /* 부호가 있으면 1번 칸부터 뒤집는다 */        int i = (s[0] == '-') ? 1 : 0;        int j = (int)strlen(s) - 1;        while (i < j) {            char t = s[i];            s[i] = s[j];            s[j] = t;            i++;            j--;        }        puts(s);    }    return 0;}
Craykonmain.cray · 14 行
n = 控制台.读行().转数字();循环 (i = 0; i < n; i++){    s = 控制台.读行().去空白();    // 수로 바꾸지 않는다: 앞에 온 0이 사라지고, 2^53보다 큰 수는 바뀐다    如果 (s.开头是("-"))    {        控制台.输出("-" + s.截取(1).反转());    }    否则    {        控制台.输出(s.反转());    }}