读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100^。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
首先,不想用java内置的Integer.parseInt方法,我们利用ASCII码和数值的对应关系,中间正好相差48
之后就是分析问题:
第一步、求和(没有什么好说的,每次都减去偏差量就可以做到完美的进行求和了)
第二步、求出上面和的位数(这个也好整)
第三步、根据上面的位数来确定结果字符串(也...好整)
package PTA.basic.PrintThisNumber1002;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class PrintThisNumber {
public static void main(String[] args) throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String target = bufferedReader.readLine();
System.out.println(method(target));
}
public static String method(String target) {
int sum = 0;
for (int i = 0 ; i < target.length() ; i ++)
sum += target.charAt(i) - 48;
StringBuffer stringBuffer = new StringBuffer();
int digit = getDigit(sum);
for (int i = digit - 1 ; i > 0 ; i --) {
stringBuffer.append(getSplitResult(sum / (int) Math.pow(10, i)) + " ");
sum %= Math.pow(10,i);
}
stringBuffer.append(getSplitResult(sum % 10));
return stringBuffer.toString();
}
public static String getSplitResult(int i) {
switch (i) {
case 0:
return "ling";
case 1:
return "yi";
case 2:
return "er";
case 3:
return "san";
case 4:
return "si";
case 5:
return "wu";
case 6:
return "liu";
case 7:
return "qi";
case 8:
return "ba";
case 9:
return "jiu";
}
return null;
}
public static int getDigit(int target) {
for (int i = 0 ; i < 100 ; i ++) {
if (target / (int) Math.pow(10, i) == 0)
return i;
}
return -1;
}
}
这个的时间是97ms
第二种方法就是简简单单的利用parseInt进行转换之后写了
emm第二种方法是....95ms,,,我要看看parseInt干了点什么,,,我觉得的应该我的方法比较快啊啊啊啊QAQ,第二种方法贴一下
package PTA.basic.PrintThisNumber1002;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class PrintThisNumber1 {
public static void main(String[] args) throws Exception {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String target = bufferedReader.readLine();
System.out.println(method(target));
}
public static String method(String target) {
int sum = 0;
for (int i = 0 ; i < target.length() ; i ++) {
sum += Integer.parseInt(target.charAt(i) + "");
}
StringBuffer stringBuffer = new StringBuffer();
int digit = PrintThisNumber.getDigit(sum);
for (int i = digit - 1 ; i > 0 ; i --) {
stringBuffer.append(PrintThisNumber.getSplitResult(sum / (int) Math.pow(10, i)) + " ");
sum %= Math.pow(10,i);
}
stringBuffer.append(PrintThisNumber.getSplitResult(sum % 10));
return stringBuffer.toString();
}
}
真是令人不爽,,,我要看看parseInt中干了什么