我写了一些代码来解决下面的问题。我尝试了一些测试用例,它们都通过了,但是当我提交答案进行自动评分时,结果是失败的。我不知道问题出在哪里。
这里是问题和对应的link :
1005 拼写正确(20分)
给定一个非负整数 N,你的任务是计算 N 所有数字的和,并用英文输出和的每一位数字。
输入规范:
每个输入文件包含一个测试用例。每个案例占一行,包含一个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;
}
最佳答案
根据网友的建议,我去掉package语句后就通过了,真是奇怪。
关于java - 为什么我的算法在 PTA 中输出总和的每一位都失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803331/