华为机试-人民币转换

题目描述

考试题目和要点:

1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分) 

2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分) 

3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。(

输入描述:

输入一个double数

输出描述:

输出人民币格式

示例1

输入

151121.15

输出

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分


Java程序代码
  1. import java.util.Scanner;  
  2.   
  3. /** 
  4.  * 人民币转换 
  5.  *  
  6.  * @author LiJian 
  7.  * 
  8.  */  
  9. public class Main {  
  10.     static char[] danWei = { '亿', '万', '仟', '佰', '拾', '元', '角', '分' };  
  11.     static char[] number = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };  
  12.   
  13.     public static void main(String[] args) {  
  14.   
  15.         Scanner scanner = new Scanner(System.in);  
  16.         while (scanner.hasNext()) {  
  17.             double rmb = scanner.nextDouble();  
  18.             // System.out.println(rmb);  
  19.   
  20.             long rmbZ = (long) rmb;  
  21.               
  22.             int jfen = (int) ((rmb + 0.0001) * 100 % 100);  
  23.             // System.out.println(jfen);  
  24.             int yi = (int) (rmbZ / 100000000);// 亿  
  25.             // System.out.println(yi);  
  26.             int wan = (int) (rmbZ % 100000000 / 10000);// 万  
  27.             // System.out.println(wan);  
  28.             int yuan = (int) (rmbZ % 10000);// 元  
  29.             // System.out.println(yuan);  
  30.             StringBuilder stringBuilder = new StringBuilder("人民币");  
  31.             appendYiWanYuan(yi, wan, yuan, stringBuilder);   
  32.             appendJFen(jfen, stringBuilder);  
  33.   
  34.             System.out.println(stringBuilder.toString());  
  35.   
  36.         }  
  37.   
  38.     }  
  39.   
  40.     private static void appendJFen(int jfen, StringBuilder stringBuilder) {  
  41.         if (jfen == 0) {  
  42.             stringBuilder.append('整');  
  43.             return;  
  44.         }  
  45.         int jiao = jfen / 10;  
  46.         int fen = jfen % 10;  
  47.         if (jiao != 0) {  
  48.             stringBuilder.append("" + number[jiao] + danWei[6]);  
  49.         }  
  50.         if (fen != 0) {  
  51.             stringBuilder.append("" + number[fen] + danWei[7]);  
  52.         }  
  53.   
  54.     }  
  55.   
  56.     private static void appendYiWanYuan(int yi, int wan, int yuan, StringBuilder stringBuilder) {  
  57.         boolean addZere = false;  
  58.         if (yi != 0) {  
  59.             jieXiFour(yi, addZere, stringBuilder);  
  60.             stringBuilder.append(danWei[0] + "");  
  61.         }  
  62.         if (wan != 0) {  
  63.             if (yi != 0) {  
  64.                 addZere = true;  
  65.             }  
  66.             jieXiFour(wan, addZere, stringBuilder);  
  67.             stringBuilder.append(danWei[1] + "");  
  68.         }  
  69.         if (yuan != 0) {  
  70.             if (wan != 0) {  
  71.                 addZere = true;  
  72.             }  
  73.             jieXiFour(yuan, addZere, stringBuilder);  
  74.             stringBuilder.append(danWei[5] + "");  
  75.         }  
  76.   
  77.     }  
  78.     private static void jieXiFour(int num, Boolean addZreo, StringBuilder stringBuilder) {  
  79.         int i = 2;  
  80.         int forNum = 0;  
  81.         int current = 0;  
  82.         int numCS = 1000;  
  83.         if (addZreo) {  
  84.             stringBuilder.append(number[0] + "");  
  85.         }  
  86.   
  87.         for (; i < 6; i++) {  
  88.             if (num == 0) {  
  89.                 break;  
  90.             }  
  91.             current = num / numCS;  
  92.             num = num % numCS;  
  93.             if (!(forNum == 0 && current == forNum)) {  
  94.                 if (i == 4 && current == 1) {  
  95.                     stringBuilder.append(danWei[i] + "");  
  96.                 } else {  
  97.                     if (i != 5) {  
  98.                         stringBuilder.append("" + number[current] + danWei[i]);  
  99.                     } else {  
  100.                         stringBuilder.append("" + number[current]);  
  101.                     }  
  102.   
  103.                 }  
  104.             }  
  105.             forNum = current;  
  106.             numCS = numCS / 10;  
  107.   
  108.         }  
  109.   
  110.     }  
  111.   
  112. }  
 

转载于:https://www.cnblogs.com/wwjldm/p/7110755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值