public class TestN2C { String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" }; String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
public String translate(int a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 0; i--) {
int r = (int) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith("零")) {
result += "零";
}
}
}
return result;
}
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(1111111111));
}
}----------------------------------------
过大的整数: 111111111111
System.out.println(t.translate(111111111111));
^
1 错误
请问我如何修改才能使此处输入超过17位整数,而不报这条错误信息??
谢谢
public String translate(int a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 0; i--) {
int r = (int) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith("零")) {
result += "零";
}
}
}
return result;
}
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(1111111111));
}
}----------------------------------------
过大的整数: 111111111111
System.out.println(t.translate(111111111111));
^
1 错误
请问我如何修改才能使此处输入超过17位整数,而不报这条错误信息??
谢谢
改成:
public String translate(long a)
最多2的64次方要更长的数字就只能用:
public String translate(String a)
System.out.println(t.translate(111111111111L));注意,整数常量的结尾有个大写的 L
public String translate(long a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 0; i--) {
long r = (long) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith("零")) {
result += "零";
}
}
}
return result;
} /**
* @param args
*/
public static void main(String[] args) {
TestN2C t = new TestN2C();
System.out.println(t.translate(111333333311L));
}}改成这样后,编译是通过了,但是执行时还是报错
改成:
Long.parseLong(l);
找到: long
需要: int
result += nums[Long.parseLong(l) - 1];
^
1 错误
public String translate(long a) {
String result = "";
if (a < 0) {
result = "负";
a = Math.abs(a);
}
String t = String.valueOf(a);
for (int i = t.length() - 1; i >= 0; i--) {
long r = (long) (a / Math.pow(10, i));
if (r % 10 != 0) {
String s = String.valueOf(r);
String l = s.substring(s.length() - 1, s.length());
result += nums[Integer.parseInt(l) - 1];
result += (units[i]);
} else {
if (!result.endsWith("零")) {
result += "零";
}
}
}
return result;
} /**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.translate(111333333311L));
}}我编译了一下出现 这个异常原因是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
at Test.translate(Test.java:21)
at Test.main(Test.java:36)
1。你在开始定义了String 类型的的
String[] units
这里相加当然出错了
result += (units[i]);
System.out.println(t.translate(1111111111));你难道没看看给的数有没有在INT的范围里???