题目描述 给定一个非负整数 NN,你的任务是计算 NN 的所有数字的总和,并以英语输出总和的每个数字。 输入格式 共一行,包含一个整数 NN,整数 NN 可能会出现前导0,比如:00123,对应的整数是123。 输出格式 共一行,用英语输出总和的每个数字,单词之间用空格隔开。
输入数据 1
12345
Copy
输出数据 1
one five
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String n = scanner.next();
int sum = 0;
for (int i = 0; i < n.length(); i++) {
sum += n.charAt(i) - '0';
}
String[] words = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String ans = "";
while (sum > 0) {
int digit = sum % 10;
ans = words[digit] + " " + ans;
sum /= 10;
}
System.out.println(ans.trim());
}
}
题目描述
给定一个非负整数N,计算N的所有数字之和并输出每个数字的英语表述。
输入格式
一个整数N。
输出格式
用英语输出N的所有数字之和,并以英语输出总和的每个数字。
例如,若N=123,则所有数字之和为6,输出为:
six
如果N=100,则所有数字之和为1,输出为:
one
解题思路
这道题需要先计算N的所有数字之和,然后将结果转换为英语表述输出。我们可以分两步来实现。
首先,对于一个非负整数N,我们可以将其每一位数字取出来进行累加求和,代码如下:
int sum = 0; for (int i = 0; i < n.length(); i++) { sum += n.charAt(i) - '0'; }
其中n.charAt(i)可以取出N的第i位数字,'0'是字符0的ASCII码,用N的第i位数字减去'0'就可以得到该数字的真实值,将其累加到sum中即可得到所有数字之和。
接下来,我们需要将数字之和转换为英语表述。我们可以创建一个字符串数组words,用来存储数字0到9的英语表述,代码如下:
String[] words = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
然后,从数字之和的末位开始取每一位数字,查找其在words数组中的对应英语表述,并将其加入结果字符串ans中,代码如下:
String ans = ""; while (sum > 0) { int digit = sum % 10; ans = words[digit] + " " + ans; sum /= 10; }
注意,这里需要将数字之和从末位开始取,所以要用取模运算来获取末位数字,然后将其对应的英语表述加入结果字符串ans中。同时,由于英语表述之间需要用空格隔开,所以每次添加完一个表述后,需要在表述和结果字符串之间添加一个空格。最后输出结果字符串即可。