我写了一些代码来解决下面的问题。我已经尝试了一些测试用例,它们都通过了,但是当我提交自动标记的答案时,结果是失败的。我不知道问题出在哪里。
这是问题和相应的链接:
1005 Spell It Right (20 分)
给定一个非负整数 N,你的任务是计算 N 的所有数字之和,并用英文输出和的每一位数字。
输入规范:
每个输入文件包含一个测试用例。每个 case 占据一行,其中包含一个 N (≤10^100 )。
输出规范:
对于每个测试用例,一行输出英文单词的和的数字。两个连续的单词之间必须有一个空格,但行尾不能有多余的空格。
样本输入:
12345
示例输出:
one five
下面是我的代码(在提交到系统之前需要将类名替换为 Main ):
package com.maxim.advance;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
scanner.close();
int length = input.length();
int sum = 0;
for (int index = 0; index < length; index++) {
sum += input.charAt(index) - '0';
}
// Consider sum == 0 case;
if (sum == 0) {
System.out.print("zero");
}
String[] names = new String[] {
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"
};
List<String> outputs = new ArrayList<String> (100);
while (sum > 0) {
outputs.add(names[sum % 10]);
sum = sum / 10;
}
int size = outputs.size();
for (int i = size - 1; i >= 0; i--) {
if (i > 0) {
System.out.print(outputs.get(i) + " ");
} else {
System.out.print(outputs.get(i));
}
}
}
}
下面的 C++ 代码是正确的并且总是通过
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
long int tmp=0;
for(int i=0;i<s.size();i++){
tmp+=(s[i]-'0');
}
string match[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
vector<string> v;
long int sum=tmp;
while(sum){
v.push_back(match[sum%10]);
sum/=10;
}
reverse(v.begin(),v.end());
if(tmp==0)//
cout<<"zero";
else
for(int i=0;i<v.size();i++){
if(i==0)
cout<<v[i];
else
cout<<" "<<v[i];
}
return 0;
}
呼唤远方
相关分类