在与财务相关的应用中,经常会用到人民币金额的大写,比如发票的打印程序。

本题的任务是:从键盘输入一个十亿以内的正整数(int类型),把它转换为人民币金额大写(不考虑用户输入错误的情况)。

比如,用户输入:35201,程序输出:叁万伍仟贰佰零壹

用户输入:30201,程序输出:叁万零贰佰零壹

用户输入:30001,程序输出:叁万零壹

用户输入:31000,程序输出:叁万壹仟

用户输入:120023201,程序输出:壹亿贰仟零贰万叁仟贰佰零壹

用户输入:120020001,程序输出:壹亿贰仟零贰万零壹

用户输入:100000001,程序输出:壹亿零壹

可以看到,在万后满千位,则不加零,否则要补零,但不要出现类似“零零”的情况。

在亿后满千万位,则不加零,否则要补零,但整个“万档”没有数字时,“万”字省去。

package com.liu.ex7;

import java.util.Scanner;

public class Main {
public static String[] A = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; public String getPart(String temp) {
int num = Integer.valueOf(temp); //除去字符串前0
temp = num + "";
String result = "";
int len = temp.length();
for(int i = 0, j = len;i < len;i++, j--) {
int number = temp.charAt(i) - '0';
if(number == 0) {
//0在个位
if(i == len - 1)
break;
//0在十位
if(len == 3 && i == 1) {
int number1 = temp.charAt(i + 1) - '0';
if(number1 == 0)
break;
else
result = result + A[0];
}
//0在十位
if(len == 4 && i == 2) {
int number1 = temp.charAt(i + 1) - '0';
if(number1 == 0)
break;
else
result = result + A[0];
}
//0在百位
if(len == 4 && i == 1) {
int number1 = temp.charAt(i + 1) - '0';
int number2 = temp.charAt(i + 2) - '0';
if(number1 != 0)
result = result + A[0];
else if(number1 == 0 && number2 != 0) {
i = i + 1;
j = j - 1;
result = result + A[0];
} else if(number1 == 0 && number2 == 0) {
break;
}
}
}
if(number != 0) {
result = result + A[number];
if(j == 4)
result = result + "仟";
else if(j == 3)
result = result + "佰";
else if(j == 2)
result = result + "拾";
}
}
return result;
} public void getResult(int n) {
String result = "";
String temp = "" + n;
int len = temp.length();
if(len >= 9) {
String temp1 = temp.substring(len - 4, len);
String temp2 = temp.substring(len - 8, len - 4);
String temp3 = temp.substring(0, len - 8);
result = result + getPart(temp3) + "亿";
if(Integer.valueOf(temp2) < 1000 && Integer.valueOf(temp2) != 0)
result = result + A[0];
if(Integer.valueOf(temp2) == 0)
result = result + A[0];
else
result = result + getPart(temp2) + "万";
if(Integer.valueOf(temp1) != 0) {
if(Integer.valueOf(temp2) != 0 && Integer.valueOf(temp1) < 1000)
result = result + A[0];
result = result + getPart(temp1);
}
} else if(len >= 5 && len < 9) {
String temp1 = temp.substring(len - 4, len);
String temp2 = temp.substring(0, len - 4);
result = result + getPart(temp2) + "万";
if(Integer.valueOf(temp1) != 0) {
if(Integer.valueOf(temp1) < 1000)
result = result + A[0];
result = result + getPart(temp1);
}
} else if(len > 0 && len < 5) {
result = result + getPart(temp);
}
System.out.println(result);
return;
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
test.getResult(n);
}
}

最新文章

  1. CSS系列:CSS常用样式
  2. java内存溢出和内存泄露
  3. ubuntu 14.04下spark简易安装
  4. ios-UIWebView中js和oc代码的互调
  5. Wbemtest查询
  6. CSS实现图片在div a标签中水平垂直居中
  7. sctf pwn200
  8. mysql 简单游标
  9. Spring Boot 中如何使用 Dubbo Activate 扩展点
  10. win8.1下无法运行vc++6.0的解决方法
  11. rt-thread平台 动态装载实现原理
  12. win8.1安装win64_11gR2_database_2of2 【INS-13001]】环境不满足最低要求问题
  13. PythonStudy——字符串重要方法 String important method
  14. addEventListener.js
  15. Neural Networks and Deep Learning(week3)Planar data classification with one hidden layer(基于单隐藏层神经网络的平面数据分类)
  16. bind的封装
  17. ssm controller层 junit单元测试
  18. Android 开发 打开默认浏览器发生崩溃
  19. html dom SetInterVal()
  20. js 操作数组的一些方法

热门文章

  1. 【跟我一起读 linux 源码 01】boot
  2. wordpress另一更新正在进行
  3. DRF路由组件和渲染器组件
  4. Kubeedge-mapper 实现
  5. Canvas 画圆
  6. 【转】Mac系统常用快捷键大全
  7. UIAutomator2的API文档(二)
  8. 中国电信中兴F412光猫——IPTV与网络单线复用
  9. DQN(Deep Q-learning)入门教程(六)之DQN Play Flappy-bird ,MountainCar
  10. [06]HTML基础之表单标签