输入一个不超过12位的整数,转化为人民币的读法
2016-10-19 21:42
323 查看
package test;
import java.util.*;
public class num2rmb {
private String[] hanArr= {"零" , "壹" , "贰" , "叁" , "肆" ,
"伍" , "陆" , "柒" , "捌" , "玖"};
private String[] unitArr = {"十", "百", "千"};
private String toHanStr(String numStr)
{
int strLen = numStr.length();
int yu = strLen % 4;
//partNum表示该数字字符串可划分成的节数(每4位为一节)。
//如余数等于0,则将strLen/4赋值给partNum;否则将strLen/4 + 1赋值给partNum。
int partNum = yu == 0 ? strLen/4 : strLen/4 + 1;
//firstPartLen表示第一节的长度
int firstPartLen = strLen - (partNum - 1)*4; //因为后面节的长度是总节数减-1,而后面肯定是满4个的
String resultFirst = "";
String resultSecond = "";
String resultThird = "";
for (int i = 0 ; i < partNum ; i ++ )
{
if (i == 0)
{
String firstPart = numStr.substring(0, firstPartLen);
for(int j=0;j<firstPartLen;j++)
{
int num=firstPart.charAt(j)-48;
if(j!=firstPartLen-1&&num!=0)
{
resultFirst += hanArr[num] + unitArr[firstPartLen - 2 - j];
}
else if (j==firstPartLen-1&&num!=0)
{
resultFirst += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&firstPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&firstPart.charAt(j-1)-48!=0&&((j+1)<=firstPartLen-1)&&firstPart.charAt(j+1)-48!=0)
resultFirst += hanArr[num];
}
}
}
else if(i==1)
{
String secondPart = numStr.substring(firstPartLen, (firstPartLen + 4));
int secPartLen = 4;
for(int j=0;j<secPartLen;j++)
{
int num=secondPart.charAt(j)-48;
if (Integer.parseInt(secondPart) == 0 && partNum == 3)
{
resultSecond = hanArr[0];
break;
}
else if(j!=secPartLen-1&&num!=0)
{
resultSecond += hanArr[num] + unitArr[secPartLen - 2 - j];
}
else if (j==secPartLen-1&&num!=0)
{
resultSecond += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&secondPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&secondPart.charAt(j-1)-48!=0&&((j+1)<=secPartLen-1)&&secondPart.charAt(j+1)-48!=0)
resultSecond += hanArr[num];
}
}
}
else if(i==2)
{
String thirdPart = numStr.substring((firstPartLen + 4), strLen);
int thirdPartLen = 4;
for(int j=0;j<thirdPartLen;j++)
{
int num=thirdPart.charAt(j)-48;
if(j!=thirdPartLen-1&&num!=0)
{
resultThird += hanArr[num] + unitArr[thirdPartLen - 2 - j];
}
else if (j==thirdPartLen-1&&num!=0)
{
resultThird += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&thirdPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&thirdPart.charAt(j-1)-48!=0&&((j+1)<=thirdPartLen-1)&&thirdPart.charAt(j+1)-48!=0)
resultThird += hanArr[num];
}
}
}
}
String result = "";
if (partNum == 1)
{
//如果数字仅为0
if (resultFirst == "")
{
result = hanArr[0] + "元";
}
else
{
result = resultFirst + "元";
}
}
else if (partNum == 2)
{
//如果第二节全为0
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + "万";
}
else
{
result = resultFirst + "万" + " " + resultSecond+ "元";
}
}
else if (partNum == 3)
{
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0
&& Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + "亿";
}
else if(Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + "亿" + " " + resultSecond + " " + resultThird+ "元";
}
else if(Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + "亿" + " " + resultSecond + "万" + " " + "元";
}
else
{
result = resultFirst + "亿" + " " + resultSecond + "万" + " " + resultThird+ "元";
}
}
return result;
}
public static void main(String[] args)
{
//等号左边的Num2Rmb是nr的变量类型,右边的Num2Rmb是构造器名
num2rmb nr = new num2rmb();
//测试把一个12位以内的数字字符串变成汉字字符串
System.out.println(nr.toHanStr("12345678900"));
}
}
本人Java新手,这个程序也有待改进,请指教,注释没写,见谅了。。。
import java.util.*;
public class num2rmb {
private String[] hanArr= {"零" , "壹" , "贰" , "叁" , "肆" ,
"伍" , "陆" , "柒" , "捌" , "玖"};
private String[] unitArr = {"十", "百", "千"};
private String toHanStr(String numStr)
{
int strLen = numStr.length();
int yu = strLen % 4;
//partNum表示该数字字符串可划分成的节数(每4位为一节)。
//如余数等于0,则将strLen/4赋值给partNum;否则将strLen/4 + 1赋值给partNum。
int partNum = yu == 0 ? strLen/4 : strLen/4 + 1;
//firstPartLen表示第一节的长度
int firstPartLen = strLen - (partNum - 1)*4; //因为后面节的长度是总节数减-1,而后面肯定是满4个的
String resultFirst = "";
String resultSecond = "";
String resultThird = "";
for (int i = 0 ; i < partNum ; i ++ )
{
if (i == 0)
{
String firstPart = numStr.substring(0, firstPartLen);
for(int j=0;j<firstPartLen;j++)
{
int num=firstPart.charAt(j)-48;
if(j!=firstPartLen-1&&num!=0)
{
resultFirst += hanArr[num] + unitArr[firstPartLen - 2 - j];
}
else if (j==firstPartLen-1&&num!=0)
{
resultFirst += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&firstPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&firstPart.charAt(j-1)-48!=0&&((j+1)<=firstPartLen-1)&&firstPart.charAt(j+1)-48!=0)
resultFirst += hanArr[num];
}
}
}
else if(i==1)
{
String secondPart = numStr.substring(firstPartLen, (firstPartLen + 4));
int secPartLen = 4;
for(int j=0;j<secPartLen;j++)
{
int num=secondPart.charAt(j)-48;
if (Integer.parseInt(secondPart) == 0 && partNum == 3)
{
resultSecond = hanArr[0];
break;
}
else if(j!=secPartLen-1&&num!=0)
{
resultSecond += hanArr[num] + unitArr[secPartLen - 2 - j];
}
else if (j==secPartLen-1&&num!=0)
{
resultSecond += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&secondPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&secondPart.charAt(j-1)-48!=0&&((j+1)<=secPartLen-1)&&secondPart.charAt(j+1)-48!=0)
resultSecond += hanArr[num];
}
}
}
else if(i==2)
{
String thirdPart = numStr.substring((firstPartLen + 4), strLen);
int thirdPartLen = 4;
for(int j=0;j<thirdPartLen;j++)
{
int num=thirdPart.charAt(j)-48;
if(j!=thirdPartLen-1&&num!=0)
{
resultThird += hanArr[num] + unitArr[thirdPartLen - 2 - j];
}
else if (j==thirdPartLen-1&&num!=0)
{
resultThird += hanArr[num];
}
else if(num==0)
{
if(((j-1)>=0)&&thirdPart.charAt(j-1)-48==0) continue;
if(((j-1)>=0)&&thirdPart.charAt(j-1)-48!=0&&((j+1)<=thirdPartLen-1)&&thirdPart.charAt(j+1)-48!=0)
resultThird += hanArr[num];
}
}
}
}
String result = "";
if (partNum == 1)
{
//如果数字仅为0
if (resultFirst == "")
{
result = hanArr[0] + "元";
}
else
{
result = resultFirst + "元";
}
}
else if (partNum == 2)
{
//如果第二节全为0
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + "万";
}
else
{
result = resultFirst + "万" + " " + resultSecond+ "元";
}
}
else if (partNum == 3)
{
if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0
&& Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + "亿";
}
else if(Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)
{
result = resultFirst + "亿" + " " + resultSecond + " " + resultThird+ "元";
}
else if(Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
{
result = resultFirst + "亿" + " " + resultSecond + "万" + " " + "元";
}
else
{
result = resultFirst + "亿" + " " + resultSecond + "万" + " " + resultThird+ "元";
}
}
return result;
}
public static void main(String[] args)
{
//等号左边的Num2Rmb是nr的变量类型,右边的Num2Rmb是构造器名
num2rmb nr = new num2rmb();
//测试把一个12位以内的数字字符串变成汉字字符串
System.out.println(nr.toHanStr("12345678900"));
}
}
本人Java新手,这个程序也有待改进,请指教,注释没写,见谅了。。。
相关文章推荐
- 输入一个整数部分不超过12位的小数,变成人民币读法
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- 10. 编码:写一个c函数,实现将16进制表现形式的字符串转化为整数。例如,输入”1a”,返回26,输入“FE”,返回254
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j
- 输入一个十进制整数,设计递归函数,将该整数转化为一个二进制数。 思考: 如何将一个十进制数转化成一个8进制和16进制数。
- C语言实验——输入一个整数的小写金额值,转化为大写金额值并输出
- 10--输入一个十进制的整数,转化为二进制,输出有多少个1
- 输入一个浮点数,打印出相对应的人民币读法的字符串,如:1605.22转换后为:壹仟陆佰零伍元贰角贰分
- C语言实验:输入一个整数的小写金额值,转化为大写金额值并输出
- 将浮点数转换成人民币读法字符串(整数部分在12位以内)
- C++ 输入一个0-6的整数,转化成星期输出
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- 人民币金额大写 在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。 本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误
- C语言实验:输入一个整数的小写金额值,转化为大写金额值并输出
- 如何用Java编写从命令行输入一个整数N,当N小于或等于5则求1+2+3+
- 将一个整数N转换成字符串!(递归和非递归、及——进制转化)
- 编写程序:从键盘上输入若干个整数(以输入-1作为结束标识),输出这些数中的最大值和最小值,要求编写一个函数实现最大值和最小值的求取。
- 给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。1<=N<=1000,N肯定是奇数。所有出现的整数都不超过1000。
- 一个简单的C++程序:输入两个整数,通过调用函数求两个数中的较大值