1002 写出这个数 (20 分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的100次方。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
结尾无空行
输出样例:
yi san wu
结尾无空行
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String str = sc.next();//输入
char[] charArray = str.toCharArray();//字符串转化成字符数组
int[] num = new int[charArray.length];//创建整数数组
int sum=0;//和
String[] a = new String[20];
//System.out.println(str.length());//这一段是用于检测的
// for(int i=0;i<charArray.length;i++) {
// System.out.println(charArray[i]);
// }
for(int i=0;i<charArray.length;i++) {
num[i]=Integer.valueOf(charArray[i]-'0');//字符数字-字符0就是实际的数字值,赋值给整数数组
//System.out.println(num[i]);
sum=sum+num[i];
}
//System.out.println(sum);
String numStr=sum+"";//数组转成字符串
char[] numArr=numStr.toCharArray();//字符串转成字符数组
// for(int i=0;i<numArr.length;i++) {
// System.out.println(numArr[i]);
// }
for(int i=0;i<numArr.length;i++) {
switch(numArr[i]) {
case '0':
a[i]="ling";
break;
case '1':
a[i]="yi";
break;
case '2':
a[i]="er";
break;
case '3':
a[i]="san";
break;
case '4':
a[i]="si";
break;
case '5':
a[i]="wu";
break;
case '6':
a[i]="liu";
break;
case '7':
a[i]="qi";
break;
case '8':
a[i]="ba";
break;
case '9':
a[i]="jiu";
break;
}
System.out.print(a[i]);
if(i!=(numArr.length-1)) {
System.out.print(" ");
}
}
}
}
总结
1、将字符串转化成字符数组的方法:.toCharArray()
2、将字符数组转化成整数数组:num[i]=Integer.valueOf(charArray[i]-'0')
或者 直接写 num[i]=charArray[i]-'0'
原因是数字的ascll码并不是从00000000开始,‘0’是从00110000 开始的,所以减去‘0’,就是数的值。
3、将数组转化成字符数组:先把数组转化成字符串 sum+""
,再把字符串转成字符数组 toCharArray()
错误
为什PTA测试一直出错,但是我的代码是没有问题的,在我的代码上有一句package andWithChinese;
因为它没有这个package,而我把它复制粘贴了上去,把它删掉就可以了。