lzJava基础进行中,今天偶然间看到的一个题目:
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
如下代码:
import java.util.*;
public class Main2{
public static void main(String[] args){
String[] date = {"Ling", "Yi", "Er", "San", "Si", "Wu", "Liu", "Qi", "Ba", "Jiu"};
int digit = 1;
int t = 0;
Scanner sc = new Scanner(System.in);
int sum = 0;
String arr = sc.nextLine();
String[] a = arr.split("");
int[] num = new int[a.length];
for(int i = 0;i<a.length;i++){
num[i] = Integer.parseInt(a[i]);
}
for(int j = 0;j<num.length;j++){
sum = sum + num[j];
}
while(sum/(Math.pow(10,digit))>1)
digit++;
for(int i = digit - 1;i>=0;i--){
t = (int)(sum/Math.pow(10,i));
System.out.print(date[t]+" ");
sum = (int)(sum - t*Math.pow(10,i));
}
}
}
看到本题的第一反应,Scanner类接受数据,这个是一贯的习惯,然后开始上手了,接收一个字符串肯定是用nextLine,这没想起他的。然后接收字符串,转换成int类型,问题来了,怎么样打印输出呢?我的第一选择是用switch选择,but结果貌似就只能是你在已知能够输出几位数的情况下,毕竟经验不丰富,想的不是这么多,只想能过实现个四位数就OK了,总归是不完美的,一番苦想。。。。
最后看了百度,找到了C语言的代码。幡然醒悟,原来还可以这样,定义想要输出的0~9的中文拼音为数组,修修改改之后的代码:
while(sum/(Math.pow(10,digit))>1)
digit++;
for(int i = digit - 1;i>=0;i--){
t = (int)(sum/Math.pow(10,i));
System.out.print(date[t]+" ");
sum = (int)(sum - t*Math.pow(10,i));
}
然后出了一个缺失精度的问题,Math的pow返回的是double型的,汗~,粗心,强制转换类型 Ok 大功告成。
最后总结:
在本次题目的历程中,收获肯定是有的,对于Java的一些类和方法的用法印象加深了,相信以后的运用会更加得心应手,同时在做题的同时自己思考问题,解决问题的能力有了点点的提升,当然一次次的努力,总是会积少成多的么,其次意识到了自己性格的不足,粗心大意,对细节的把握上和对逻辑上的研究还有严重不足,再接再厉吧!康忙!
第一次试着写点什么,只为学习之余记录下学习过程中的心路历程。不喜勿喷,谢谢!