首页 > 试题广场 >

Spell It Right (20)

[编程题]Spell It Right (20)
  • 热度指数:2825 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.

输入描述:
Each input file contains one test case. Each case occupies one line which contains an N (<= 10100).


输出描述:
For each test case, output in one line the digits of the sum in English words. There must be one space between two consecutive words, but no extra space at the end of a line.
示例1

输入

12345

输出

one five
#include<stdio.h>
int main()
{
	int i = 0, sum = 0, a[100];
	char str[10015], pinyin[10][6] = { "zero","one","two","three","four","five","six","seven","eight","nine" };
	scanf("%s", str);
	while (str[i])
	{
		sum += str[i] - '0';
		i++;
	}
	i = 0;
	while (sum > 0)
	{
		a[i] = sum % 10;
		sum /= 10;
		i++;
	}
	for (int j = i - 1;j > 0;j--)
	{
		printf("%s ", pinyin[a[j]]);
	}
	printf("%s", pinyin[a[0]]);
	return 0;
}

发表于 2017-08-06 21:38:15 回复(0)
package go.jacob.day826;

import java.util.Scanner;

public class Demo1 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String s=sc.nextLine();
		int sum=0;
		for(int i=0;i<s.length();i++){
			sum+=s.charAt(i)-'0';
		}
		String res=sum+"";
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<res.length();i++){
			switch (res.charAt(i)) {
			case '0':
				sb.append("zero ");
				break;
			case '1':
				sb.append("one ");
				break;
			case '2':
				sb.append("two ");
				break;
			case '3':
				sb.append("three ");
				break;
			case '4':
				sb.append("four ");
				break;
			case '5':
				sb.append("five ");
				break;
			case '6':
				sb.append("six ");
				break;
			case '7':
				sb.append("seven ");
				break;
			case '8':
				sb.append("eight ");
				break;

			default:
				sb.append("nine ");
				break;
			}
		}
		
		System.out.println(sb.toString().substring(0,sb.length()-1));
	}
}


发表于 2017-08-26 10:32:09 回复(0)
这题简单了,第一次一次通过所有测试用例,做个纪念

#include<stdio.h>

#include<iostream>

#include<string>


using namespace std;


string digToEng[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};

int main()

{

    string input;

    cin>>input;

    int sum = 0;

    int result[1000];

    for(int i=0;i<input.size();i++)

    {

        int digit = input[i]-48;

        sum+=digit;

    }

    int i=0;


    if(sum==0)

    {

        cout<<"zero"<<endl;

        return 0;

    }

    while(sum>0)

    {

        int current = sum%10;

        sum = sum/10;

        result[i] = current;

        i++;

    }


    for(int j=i-1;j>=0;j--)

    {

        cout<<digToEng[result[j]];

        if(j!=0)

            cout<<" ";

    }

    cout<<endl;

    return 0;

}


发表于 2018-02-15 07:54:08 回复(0)
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    string s,digit[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
    cin>>s;
    int i,j,t,total=0;
    for(i=0;i<s.size();i++)
        total+=s[i]-48;
    vector<string> num;
    while(1)
    {
        num.push_back(digit[total%10]);
        if(total%10==total) break;
        total/=10;
    }
    for(i=num.size()-1;i>=0;--i)
    {
        cout<<num[i];
        if(i>0) cout<<' ';
    }
    return 0;
}

发表于 2019-04-09 20:20:17 回复(0)
import java.math.BigInteger;
import java.util.Scanner;
//思路很简单,使用biginteger处理数据,之后转换成string再一个个字符输出就行。
//先设定一个字符数组,就可以不用冗长的switch-case了。
public class Main {

	public static void main(String[] args) {
		String c[]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"};
		Scanner in=new Scanner(System.in);
		String s=in.nextLine();
		BigInteger sum=new BigInteger("0");
		for(int i=0;i<s.length();i++){
			sum=sum.add(new BigInteger(String.valueOf(s.charAt(i))));
		}
		s=sum.toString();
		for(int i=0;i<s.length();i++){
			if(i!=0){
				System.out.print(" ");
			}
			System.out.print(c[(int)(s.charAt(i)-'0')]);
		}
	}
}


发表于 2016-10-27 22:07:51 回复(0)
#include <iostream>
#include <stack>
#include <string>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

stack<string> num;
int main(int argc, char** argv) {
	string str;
	long long sum = 0.0;
	cin >> str;
	for(int i = 0;i < str.length();i++){
		sum += str[i] - '0';
	}
	while(sum > 0){
		switch(sum % 10){
			case 0: num.push("zero");break;
			case 1: num.push("one");break;
			case 2: num.push("two");break;
			case 3: num.push("three");break;
			case 4: num.push("four");break;
			case 5: num.push("five");break;
			case 6: num.push("six");break;
			case 7: num.push("seven");break;
			case 8: num.push("eight");break;
			case 9: num.push("nine");break;
		}
		sum /= 10;
	}
	string s;
	s = num.top();
	num.pop();
	cout << s;
	while(!num.empty()){
		cout << " ";
		s = num.top();
		num.pop();
		cout << s;
	}
	cout << endl;
	return 0;
}

发表于 2016-01-29 23:01:47 回复(0)
啥头像
eng = {'0':'zero', '1':'one', '2':'two', '3':'three', '4':'four',\
        '5':'five', '6':'six', '7':'seven', '8':'eight', '9':'nine'}
num = raw_input()
rlt = 0
for i in num:
    rlt += int(i)
rlt = str(rlt)
for i in rlt:
    print eng[i],


发表于 2016-01-27 21:44:43 回复(0)
#include<iostream>
using namespace std;

string s[15]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"};

int main(){
	string str;
	cin>>str;
	int n=str.size(),sum=0;
	for(int i=0;i<n;i++){
		sum+=str[i]-'0';
	}
	string answer=to_string(sum);
	int m=answer.size();
	for(int i=0;i<m;i++){
		cout<<s[answer[i]-'0'];
		if(i<m-1) cout<<" ";
	}
	return 0;
}

发表于 2022-11-07 14:29:55 回复(0)
#include <iostream>
#include <sstream>
#include <string>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

int main() {
    string input;
    getline(cin, input);
    int sum = 0;
    for(int i = 0; i < input.size(); i++) {
        sum += input[i] - '0';
    }
    string sums = to_string(sum);
    map<char, string> names = {
            {'1', "one"},
            {'2', "two"},
            {'3', "three"},
            {'4', "four"},
            {'5', "five"},
            {'6', "six"},
            {'7', "seven"},
            {'8', "eight"},
            {'9', "nine"},
            {'0', "zero"}
    };
    for(int i = 0; i < sums.size(); i++) {
        cout << names[sums[i]];
        if (i < sums.size() - 1) {
            cout << " ";
        }
    }
    return 0;
}

发表于 2021-06-29 21:05:24 回复(0)
#include<iostream>
#include<vector>
#include<string.h>
#include<map>
using namespace std;
void spellitinenglish() {
    string hanyu[] = { "zero" , "one","two","three","four","five" ,"six" ,"seven","eight","nine" };
	//string hanyu[] = { "ling" , "yi","er","san","si","wu" ,"liu" ,"qi","ba","jiu" };
	string n;
	int sum = 0;
	cin >> n;
	if (n == "0") {
		sum = 0;
	}
	for (int i = 0; i < n.size(); i++) {
		sum += n[i] - '0';
	}
	vector<int>q;
	if (sum == 0) {
		q.push_back(0);
	}
	while (sum != 0) {
		q.insert(q.begin(), sum % 10);
		sum /= 10;
	}
	auto it = q.begin();
	for (; it != q.end(); it++) {

		cout << hanyu[*it];
		if (it != q.end() - 1) {
			cout << " ";
		}
	}
 }int main()
{
	spellitinenglish();
	return 0;
}

发表于 2020-01-26 22:55:02 回复(0)
牛客测试例少了 zero 的情况丫
发表于 2019-03-02 16:16:29 回复(1)
n = input()
lst = []
for i in n:
    lst.append(int(i))
suma = 0
for i in lst:
    suma = suma + i
out = str(suma)
outlst = []
for i in out:
    if i == '0':     
        outlst.append("zero")
    if i == '1':     
        outlst.append("one")
    if i == '2':     
        outlst.append("two")
    if i == '3':     
        outlst.append("three")
    if i == '4':     
        outlst.append("four")
    if i == '5':     
        outlst.append("five")
    if i == '6':     
        outlst.append("six")
    if i == '7':     
        outlst.append("seven")
    if i == '8':     
        outlst.append("eight")
    if i == '9':     
        outlst.append("nine")
print(' '.join(outlst))

发表于 2018-11-25 23:41:04 回复(0)
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{     string N;     cin >> N;     vector<string> digits = {         "zero", "one", "two", "three", "four", "five", "six", "seven",         "eight", "nine"     };     int sum = 0;     for (int i = 0; i < N.size(); i++) {         sum += (int)(N[i] - '0');     }     if (sum == 0) {         cout << digits[0] << endl;     }     vector<string> res;     while (sum > 0) {         res.push_back(digits[sum % 10]);         sum = sum / 10;     }     cout << res.back();     for (int i = res.size() - 2; i >= 0; i--) {         cout << " " << res[i];     }     cout << endl;     return 0; }

发表于 2018-09-06 23:42:14 回复(0)
// 题目的意思是就是把一个数子的所有的数加起来的值是多少??
// 具体不再多说。简单做了一个数字的映射关系。
#include <iostream>
#include <map> 
#include <string>
#include <sstream>
/* run this program using the console pauser or add your own get*/
using namespace std;
string numEnglish[] = {"zero","one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int String2Int(char A)
{
    int a;
    stringstream ss;
    ss << A;
    ss >> a;
    return a;
}

string Int2String(int A)
{
    string a;
    stringstream ss;
    ss << A;
    ss >> a;
    return a;
}

int main(int argc, char** argv) {
    string N;
    cin >> N;
    int nNumber=0;
    for(int i=0; i<N.size(); i++)
    {
        nNumber+=String2Int(N[i]);
    }
    N = Int2String(nNumber);
    for(int i=0; i<N.size(); i++)
    {
        cout << numEnglish[String2Int(N[i])];
        if(i == N.size() - 1)
        {
        
        }
        else
        {
            cout << " ";
        }
    }
    cout << endl;
    return 0;
}

发表于 2018-07-16 18:25:51 回复(0)
#include <sstream>
#include <string>
#include <iostream>
using namespace std;

string code[10] = {"zero", "one", "two", "three", "four",
                   "five", "six", "seven", "eight", "nine"};

int main(){
    int n=0;
    string s, str;
    cin >> s;
    for(unsigned int i=0;i<s.size();i++){
        n += (s[i] - '0');
    }
    stringstream ss;
    ss << n;
    ss >> str;
    cout << code[str[0]-'0'];
    for(unsigned int i=1;i<str.size();i++){
        cout << " " << code[str[i]-'0'];
    }
    cout << endl;
    return 0;
}

发表于 2017-08-01 00:22:22 回复(0)
import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		String input = in.nextLine();
		char[] arr = input.toCharArray();
    
		Integer sum = 0;
		for(int i=0;i<arr.length;i++){
			sum = sum + (int)(arr[i]-'0');
		}
		String s = sum.toString();
		
		String[] numbers = new String[10];
		numbers[0] = "zero";
		numbers[1] = "one";
		numbers[2] = "two";
		numbers[3] = "three";
		numbers[4] = "four";
		numbers[5] = "five";
		numbers[6] = "six";
		numbers[7] = "seven";
		numbers[8] = "eight";
		numbers[9] = "nine";
		
		for(int i=0;i<s.length()-1;i++){
			System.out.print(numbers[(int)(s.charAt(i)-'0')]+" ");  
		}
		System.out.print(numbers[(int)(s.charAt(s.length()-1)-'0')]);
	}
}

编辑于 2017-06-15 09:58:32 回复(0)
#include <stdio.h>
#include <string.h>

char buf[10][10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};

char str[110];

char tmp[110];

int main()
{
    int n,ans,i,t;
    int j,len;
    while(~scanf("%s",str))
    {
    	j = 0;
    	ans = 0;
        len = strlen(str);
        
        for(i=0;i<len;i++)
        {
        	ans += (str[i] - '0');
        }
        
        if(ans == 0)  //注意处理0的情况 
        {
        	printf("%s\n","zero");
        	continue;
        }
    	
    	while(ans != 0)  //把每一位依次存下来 
    	{
    		tmp[j++] = ans%10;
    		ans /= 10;
    	}
    	
    	for(i=j-1;i>=0;i--)
    	{
    		t = tmp[i];
    		printf("%s",buf[t]);
    		
    		if(i != 0)
    		{
    			printf(" ");
    		}
    	}
    	
    	printf("\n");
    }
    return 0;
} 

发表于 2017-03-13 10:30:04 回复(0)
#include<iostream>
#include<stack>
#include<string>
using namespace  std;
int main()
{
 //输入
 string inputnumber;
 cin >> inputnumber;
 stack<int> SumStack;
 int temp;
 for (int i = 0; i < inputnumber.length(); i++)
 {
  temp = inputnumber[i]-'0';
  SumStack.push(temp);
 }
 
 //求和
 int sum = 0;
 while (!SumStack.empty())
 {
  sum += SumStack.top();
  SumStack.pop();
 }
 stack<int> stacks;
    int  number = sum;
 //拆分和
 while (1)
 {
  stacks.push(number % 10);
  number = number / 10;
  if (number == 0) break;
 }
 //读
 while (!stacks.empty())
 {
 
  switch (stacks.top())
  {
  case 0:cout << "zero"; break;
  case 1:cout << "one"; break;
  case 2:cout << "two"; break;
  case 3:cout << "three"; break;
  case 4:cout << "four"; break;
  case 5:cout << "five"; break;
  case 6:cout << "six"; break;
  case 7:cout << "seven"; break;
  case 8:cout << "eight"; break;
  case 9:cout << "nine"; break;
  default:
   break;
  }
  stacks.pop();
  if (stacks.size()!=0)
  {
   cout << " ";
  }
 }
 return 0;
} 

发表于 2016-09-13 18:11:25 回复(0)
//用递归解法 
#include<stdio.h>
#include<string.h>
char say[12][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};

void dfs(int n){  //用递归实现反序输出
if(n/10==0)
 {
 printf("%s",say[n%10]);
 return;
 }
dfs(n/10);
printf(" %s",say[n%10]);
}
int main(){
char str[105];
scanf("%s",str);
int len=strlen(str);
int sum=0;
for(int i=0;i<len;i++){
sum+=str[i]-'0';
}
dfs(sum);
  return 0;
}
发表于 2016-09-04 08:16:13 回复(0)