要求:通过命令行输入一串字符,首先判断这些字符是否都为数字。如果其中有字符不是数字,那么输出"用户输入的字符不都为数字,无法转换"程序结束;如果用户输入都为数字,那么将该数字转换为中文的大写表示(用户每次最多输入8个字符)
输入输出示例:
输入:1234567
输出:一百二十三万四千五百六十七
输入:0001
输出:一
输入:1001
输出:一千零一
输入:1100
输出:一千一百
输入:10100
输出:一万零一百
输入:0010
输出:十
输入:00000001
输出:一
输入:10000001
输出:一千万零一
输入:10000010
输出:一千万零十
输入:10000100
输出:一千万零一百
输入:11000000
输出:一千一百万
输入:10100000
输出:一千零十万
输入:10010000
输出:一千零一万
输入:10001000
输出:一千万零一千
输入:a00045
输出:用户输入的字符不都为数字,无法转换
输入:a
输出:用户输入的字符不都为数字,无法转换
import java.util.Scanner;
public class Uppercase
{
public static void main(String[] args)
{
int num = 0;
String str = null;
for(int i=0;i<10;i++)//控制输入10次
{
System.out.println("请输入8位或8位以下的数字:");
while(true)
{
Scanner input = new Scanner(System.in);
str = input.next();
if(str.length()>8)
{
System.out.println("你输入的数字超过8位,请重新输入:");
continue;
}
try
{
num = Integer.parseInt(str);
}catch(Exception ex)
{
System.out.println("输入的字符不都为数字,无法转换");
System.exit(0);
}
break;
}
System.out.println("转换输入的数字为中文大写:");
if(0==Integer.parseInt(str))//如果输入0返回零
{
System.out.println('零');
continue;
}
if(str.length()<=4)//输入的数字为4位数
{
System.out.println(ConvertForth(str));
continue;
}
System.out.println(ConvertEighth(str));//输入的数字为8位
}
}
public static StringBuilder ConvertForth(String str)//处理4位数
{
char[] BigNum = {'零','一','二','三','四','五','六','七','八','九'};
int sum = Integer.parseInt(str);
//千位数上的数字
int num1 = sum/1000;
//百位数上的数字
int num2 = sum%1000/100;
//十位数上的数字
int num3 = sum%1000%100/10;
//个位数上的数字
int num4 = sum%10;
StringBuilder strbuild = new StringBuilder();
if(num1!=0)//处理千位,如果千位不为0
{
strbuild.append(BigNum[num1]).append('千');
if(num2==0 && num3==0 && num4==0)//千位后面全为0直接返回
{
return strbuild;
}
strbuild.append(BigNum[num2]);//加上百位的数字包括0
}
if(num2!=0)//处理百位,如果百位不为0
{
if(num1==0)//如果千位为0,加上百位的数字。
{
strbuild.append(BigNum[num2]);
}
strbuild.append('百');
if(num3==0 && num4==0)//如果百位后面的数字都为0直接返回
{
return strbuild;
}
}
if(num3!=0)//处理十位
{
if(num3!=1 || num2!=0)//十位不为1或者十位为1但百位不为0时加上数字和单位
{
strbuild.append(BigNum[num3]).append('十');
}
else
{
strbuild.append('十');//其他情况直接加上单位
}
if(num4==0)//如果个位为0直接返回
{
return strbuild;
}
}
else if (num2!=0 )//百位不为0,十位为0时在百位和个位中间加个0
{
strbuild.append('零');
}
if(num4!=0)//处理个位
{
strbuild.append(BigNum[num4]);
}
return strbuild;
}
public static StringBuilder ConvertEighth(String str)//处理8位的数字
{
int sum = Integer.parseInt(str);
int fornum = sum/10000;//前4位
int lastnum = sum%10000;//后4位
int wanUnit = fornum%10;//取万位上的数字
int qianUnit = lastnum/1000;//取千位上的数字
String Ffour = String.valueOf(fornum);
String Lfour = String.valueOf(lastnum);
StringBuilder Ffourbuild = ConvertForth(Ffour);
StringBuilder Lfourbuild = ConvertForth(Lfour);
StringBuilder eight = new StringBuilder();//最终结果
if(wanUnit!=0 && qianUnit!=0)//如果万位不为0且千位不为0加上万单位
{
eight = Ffourbuild.append('万').append(Lfourbuild);
return eight;
}
else if(lastnum==0)//千位以下为0直接加万单位
{
eight = Ffourbuild.append('万');
return eight;
}
//千位为0,万位以上不为0或者千位不为0万位为0情况中间加个零
else if(qianUnit==0 && fornum!=0 || qianUnit!=0 && wanUnit==0 && fornum!=0)
{
eight = Ffourbuild.append('万').append('零').append(Lfourbuild);
return eight;
}
//万位以上为0直接换算后4位
eight.append(Lfourbuild);
return eight;
}
}