问题描述:
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式:
共一行,包含一个整数 N。
输出格式:
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
数据范围
0 ≤ N ≤ 0≤ N≤ 0≤N≤ 10100
输入样例:
12345
输出样例:
one five
算法
(字符串,分割) O ( ) O() O();
思路:
因为题目所给的N的范围已经远远超出了能存储下的范围,所以应该 考虑到使用字符串来解决,而字符和数字的转化就是-'0’的操作,所以用字符串做运算,就可以解决溢出的问题,最后在将数字映射之前准备好的数组中即可!
时间复杂度分析
取决于数字的长度。
C++代码:
#include <iostream>
#include <cstring>
using namespace std;
string n;
int sum = 0;
string word[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int main()
{
cin >> n;
for(auto c: n) sum += c - '0'; //求和
string res = to_string(sum); //将sum转换成字符串
for(auto r: res) cout << word[(r - '0')] << ' '; //将每一位映射到word[]中输出即可
return 0;
}
Java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
String[] word = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String str = sc.nextLine();
//将字符串转成数字 累加
for (int i = 0; i < str.length(); i++) {
sum += str.charAt(i) - '0';
}
//将sum 转成 字符串 的三种方式
String res = String.valueOf(sum);
//String res = Integer.toString(sum);
//String res = sum + "";
//映射 输出
for (int i = 0; i < res.length(); i++) {
System.out.print(word[res.charAt(i) - '0'] + ' ');
}
}
}