将输入的整数数字翻译成对应的中文形式

这种小程序:非常实用,尤其是在银行里的支票上的金额显示(呈现的就是汉字形式)

/**
*编码将输入的整数数字翻译成对应的中文形式(输入的数字首字母不能为0,除非它是0)
*/
import java.util.Scanner;

public class N2C2023
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);

        System.out.print("请输入待翻译的十进制整数:");
        String input = sc.next();

        System.out.print(input + "翻译成中文数字为:");

        /**
        *1.    1234--->一千两百三十四
        *2.    1001--->一千零一(零的时候不输出单位,连续多个零只输出一个零(后面有非零的数)或者不输出)
        *3.    0101--->一百零一(首位的零不需要输出(它是最高位))
        *4.    1100--->一千一百(后面连续的零不需要输出)
        *5.    39070100--->三千九百零七万零一百(从右边开始,每4位为一组,组间有单位:" ","万","亿")
        *            组内每个数也有单位:(从右向左):"","十","百","千"
        *总的翻译原则:从左到右,分组翻译(数+单位),然后再输出组间的单位。
        *项目难点:零的处理!
        */

        String[] dname = {"零","一","二","三","四","五","六","七","八","九"};        //数字的汉字名
        String[] zdw   = {" ","十","百","千"};                                        //组内各数的单位
        String[] jdw   = {" ","万","亿","万亿","亿亿"};                                //节的单位

        //需要记录的几个状态信息
        //1.组内是否全为0?count变量统计组内0的个数,如果为4,则全为0。
        //2.组内是否出现0?组内后面出现非零的数时,需要补偿输出零。isYes = true需要补偿输出零,否则无需输出零。
        //3.当前数字是否处于:组内还是组间(小节结束)?

        int count = 0;                //统计组内0的个数
        boolean isYes = false;        //是否需要补偿输出零
        int len = input.length();    

        //从左向右,依次处理输入字符串中的每一个字符
        for(int i = 0; i < len; i++)
        {
            int d = input.charAt(i) - '0';    //'1' ---> 1

            if(d == 0)
            {
                count++;        //统计组内零的个数,如果遇到新的组,则count清0
                if(!isYes)
                {
                    isYes = true;        //后面如果组内还有非零的数字,则需要补偿输出零
                }
            }

            else            //非零数字的处理
            {
                if(isYes)    //需要补偿输出零
                {
                    System.out.print("零" + dname[d]);
                    isYes = false;
                }
                else
                {
                    System.out.print(dname[d]);
                }
            }

            //输出该数字的单位:考虑当前数字是否为组间的位置,如果是,再输出组间的单位,否则只需要输出组内的单位

            if((len - i) % 4 == 1)//组间:1 0000    1 2345 6789
            {
                if(count != 4)
                {
                    System.out.print(jdw[(len - i) / 4]);        //本小节不全为0,必须输出小节(组间)的单位
                }

                count = 0;    //小节结束,为统计下一组内的零做准备
            }

            else
            {
                if(d != 0)
                {
                    System.out.print(zdw[(len - 1 - i) % 4]);        //输出组内每个数的单位
                
                }
            
            }

        }

        if(isYes && (len == 1))
        {
            System.out.print("零");
        
        }

        System.out.println();
    }
}
 

结果的简单展示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值