算法题:把阿拉伯金额转化为汉字表示的金额

n年没写算法题了,今天用了20分钟写了一个,要求如题,感觉算法有所退步,老了

using System;
using System.Text;
namespace money
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb=new StringBuilder();
            var strValue = Console.ReadLine();
            var strlist = strValue.Split('.');
            if (strlist.Length >= 2)
            {
                var temp = strlist[1];
                if (temp.Length >= 2)
                {
                    if (temp[0] != '0')
                        sb.Append(GetChinese(Convert.ToInt32(temp[0].ToString()))).
                            Append("角").
                            Append(GetChinese(Convert.ToInt32(temp[1].ToString()))).
                            Append("分");
                    else
                        sb.Append(GetChinese(0));
                }
                else
                    sb.Append(GetChinese(Convert.ToInt32(temp[0].ToString()))).Append("角");
            }
            int stateNum = 0;
            int tempNum = Convert.ToInt32(strlist[0]);
            string outline = string.Empty;
            while (tempNum>0)
            {
                int g = tempNum%10;
                if (g == 0)
                {
                    outline += (stateNum!=0)?GetChinese(g):string.Empty;
                    while (g == 0)
                    {
                        stateNum++;
                        tempNum = tempNum / 10;
                        g = tempNum % 10;
                    }
                }
                else
                {
                    outline += (stateNum <= 4) ? GetDW(stateNum) : GetDW((stateNum + 1) / 4);
                    outline += GetChinese(g);
                    tempNum = tempNum / 10;
                    stateNum++;
                }
                if (stateNum == 5)
                    stateNum++;
            }
            string right = string.Empty;
            for (int i = outline.Length-1; i >= 0; i--)
            {
                right += outline[i].ToString();
            }
            Console.WriteLine(right+sb.ToString());
            Console.ReadKey();
        }
        private static string GetDW(int i)
        {
            switch (i)
            {
                case 0:
                    return "元";
                case 1:
                    return "十";
                case 2:
                    return "百";
                case 3:
                    return "千";
                case 4:
                    return "万";
            }
            return null;
        }
        private static string GetChinese(int i)
        {
            switch (i)
            {
                case 1:
                    return "一";
                case 2:
                    return "二";
                case 3:
                    return "三";
                case 4:
                    return "四";
                case 5:
                    return "五";
                case 6:
                    return "六";
                case 7:
                    return "七";
                case 8:
                    return "八";
                case 9:
                    return "九";
                case 0:
                    return "零";
            }
            return null;
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, return
, append
, tostring
, case
, temp
阿拉伯
,以便于您获取更多的相关知识。

时间: 2024-08-20 14:04:57

算法题:把阿拉伯金额转化为汉字表示的金额的相关文章

经典算法题每日演练——第七题 KMP算法

原文:经典算法题每日演练--第七题 KMP算法       在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树是变态级的,那么kmp算法比红黑树还要变态,很抱歉,每次打kmp的时候,输 入法总是提示"看毛片"三个字,嘿嘿,就叫"看毛片算法"吧. 一:BF算法      如果让你写字符串的模式匹配,你可能会很快的写出朴素的bf算法,至少问题是解决了,我想大家很清楚的知

记一道毫无思路的算法题

今天贤内给了我一道很实际的算法题,把我彻底难住了,实在想不出来,于是写此博文以记之. 背景是这样的,现在有一个付款明细的Excel,里面有为哪个发票,哪个公司应付多少钱的明细,明细数据是62条,现在知道我们已经付出的金额为Sum,请问到底哪些发票是已付款的. 这是62条明细数据: 653165.00 356029.11 220896.45 146362.00 1847670.00 3018518.91 1347553.07 145010.74 339784.84 199350.28 120611

浅谈js中字符和数组一些基本算法题_javascript技巧

最近在刷 fcc的题,跟升级打怪一样,一关一关的过,还挺吸引我的.今天抽时间把 Basic Algorithm Scritping  这部分题做了,根据一些提示,还是比较简单的.有些题的处理方式 方法,我想值得借鉴.比如在项目中有时候要处理一个字符,如果想不到一些相关的方法,还挺费事的,所以,在此记录下来,如果以后遇到一些字符或者数组处理,可以来翻翻这篇文章,希望以此得到一些提示而不是去翻文档. 看到此博文的博友,有更好更简单的代码或者好的想法,请留言交流(我一直觉得只有学习别人的优秀代码才能进

winform 逻辑算法题

问题描述 总金额666.66复选框名字价格付款√电器130066√电器2300300√电器3200200√电器4200100.66电器53000电器63000列表用datagridview1.付款=总额,才能提交2.付款>总额不能√3.付款可手动输入,但不能比价格大,(输入多了要提示,获取焦点在输入)4.列表是从数据库读取,然后(付款字段用的递归赋值)(注意:读取数据时付款有可能比价格大,这时要将多的付款减去,将多的给到下一个,如此类推....总之一点:付款不能比价格大 解决方案 解决方案二:那

一道算法题,看看大家的思路(续)

"一道算法题,看看大家的思路",看了众多的回复,本人愚钝,没有看明白其中的奥妙.在细细研究<编程之美>中的文章后,终于理解了这个算法的思路.现将这个算法的演算过程以及代码实现(VB2005)赋予其后,和各位交流. 现再将题目复述一遍: 题目描述:有31,-41,59,26,-53,58,97,-93,-23,84十个数.SUM(N,M)表示从第N个数到到第M个数的和.例如:SUM(2,3)=-41+59=18.问:最大的和是多少?对应的N和M是多少? 先不管N和M的计算,直

一个算法题,求答案啊啊啊啊

问题描述 一个算法题,求答案啊啊啊啊 白班 09:00-18:00 通班 09:00-21:00 每个人每个月通班数量必须等于早中班和中晚班数量之和 早中班 09:00-15:00 中晚班 15:00-21:00 假设:每月按照30计算. 排班规则: 1.每个人每个月固定休息6天连续上班天数不超过7天. 2.每天各班次上班的人数最低需求:8个白班5个通班1个早中班,2个中晚班. 3.每个月每个人的通班天数安排不超过8天. 4.每个人每个月早中班和中晚班的天数之和需要与通班天数相等. 5.每月最多

数字日期转化为汉字日期格式

汉字 script>  /*  功能:YYYY-MM-DD 数字日期转化为汉字  例:1984-3-7 -> 一九八四年三月七日  调用:baodate2chinese("1984-3-7")  */  var chinese = ['零','一','二','三','四','五','六','七','八','九'];  var len = ['十'];  var ydm =['年','月','日'];  function num2chinese(s)  {    file:/

JavaScript数字日期转化为汉字日期格式

javascript|汉字|日期 <script>/*  功能:YYYY-MM-DD 数字日期转化为汉字  例:1984-3-7 -> 一九八四年三月七日  调用:baodate2chinese("1984-3-7")*/var chinese = ['零','一','二','三','四','五','六','七','八','九'];var len = ['十'];var ydm =['年','月','日'];function num2chinese(s){    //

算法题:poj 2541 Binary Witch(KMP水过,逆序转换)

链接: http://poj.org/problem?id=2541 分析与总结: 做这题估算了下复杂度,觉得无论KMP再怎么快,这题暴力也肯定要超时的. 想了很久也没想出个好办法,于是决定暴力之,但是TLE了....于是就放了几天.之后看了下discuss ,这题的正解应该是状态压缩dp,不过目前我还不懂,跪了. 之后百度发现也可以用KMP水过,虽然是因为数据水才过的,不过这种思路很巧妙,值得借鉴! 直接暴力是枚举字符串的后面13个的字母,然后再用KMP匹配,这样的话,就绪要枚举多次,分别是