1477. 拼写正确
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
数据范围
$0≤N≤10^{100}$
输入样例:
12345
输出样例:
one
five
思路:
直接模拟即可。
1. 计算出各位上数字的总和。
2. 由于需要从前往后遍历,故将总和转为字符串,用下标来找各位上的数字更方便。
3. 将zero ~ nine
十个英语单词先打表,之后直接查找并输出即可。
要注意的地方:
$0≤N≤10^{100}$,故输入的N
可能远远超出了int
和long
的范围,故我们第一反应就是用String
来存这个数了。这也说明做算法题时,数据的输入范围有时也是解题的重要信息,有时甚至决定了代码的做法。
Java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入的数字可能很大(10^100),远远超出int和long的范围,所以我们直接用String存更好
String strNum = sc.next();
int sum = 0;
//打表,方便后期查询
String[] strs = {"zero","one","two","three","four","five","six","seven","eight","nine"};
//得到数字strNum的各位上数字的总和
for(int i = 0;i < strNum.length();i++){
sum += strNum.charAt(i) - '0';
}
//将总和转为字符串,方便从头至尾遍历各个位上的数字
String strSum = String.valueOf(sum);
//可以转为英文输出了
for(int i = 0;i < strSum.length();i++){
System.out.print(strs[strSum.charAt(i) - '0'] + " ");
}
}
}