L1-007 念数字(10分)[java][python]

2 阅读1分钟

题目描述

输入一个整数,输出该整数对应的中文读法。

  • 负数输出 "fu"
  • 正数按如下规则输出每个数字:ling yi er san si wu liu qi ba jiu

输入输出格式

输入:一个整数 N(-10^9 <= N <= 10^9)

输出:该整数的中文读法,数字之间用空格分隔

样例

输入

-600

输出

fu liu ling ling

解题思路

  1. 处理负数,输出 "fu" 并取绝对值
  2. 将整数转换为字符串,逐字符转换为中文读法
  3. 用空格连接输出

代码实现

Java

import java.util.Scanner;

public class Main {
    static String[] num = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        if (n < 0) {
            System.out.print("fu ");
            n = -n;
        }

        String s = String.valueOf(n);
        for (int i = 0; i < s.length(); i++) {
            if (i > 0) System.out.print(" ");
            System.out.print(num[s.charAt(i) - '0']);
        }
    }
}

Python

num = ["ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"]
n = input().strip()

if n.startswith('-'):
    print("fu", end=" ")
    n = n[1:]

print(" ".join(num[int(d)] for d in n))

复杂度分析

  • 时间复杂度:O(k),k 为数字位数
  • 空间复杂度:O(1)

总结

本题主要考察字符串处理和数组映射。核心是建立数字到中文读法的映射关系。