面试技能五
来源:互联网 发布:plc步进电机编程实例 编辑:程序博客网 时间:2024/04/27 04:50
用C#写一个CheckWriter的控制台程序,如果你在银行工作,需要一个系统能够当你输入一串数字金额后能用其对应的英文输出,这样方便打印在支票上防止篡改。用户输入一个0到20亿的数字包含最多2位小数,将其转换为英文输出。例如输入1258276.25,能够输出:one million, three hundred and fifty seven thousand, two hundred and fitty six DOLLARS AND thirty two CENTS.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CheckWriter{ class Program { private static string[] _lessTwentyNumbers = new string[]{"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen","Sixteen", "Seventeen", "Eighteen", "Nineteen"}; private static string[] _lessHundredNumbers = new string[]{"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty","Ninety"}; private static string[] _scaleNumbers = new string[] { "", "Thousand", "Million", "Billion" }; static void Main(string[] args) { string s = ConvertDecimalToWords(1258276.25); Console.WriteLine(s); Console.Read(); } /// <summary> /// 将数字转为英文描述 /// </summary> /// <param name="number"></param> /// <returns></returns> private static string ConvertNumberToWords(int number) { if (number == 0) { return _lessTwentyNumbers[0]; } int[] digitGroups = new int[4]; int positive = Math.Abs(number); // 将数字按三位一段保存到数组里 for (int i = 0; i < 4; i++) { digitGroups[i] = positive % 1000; positive /= 1000; } string[] groupText = new string[4]; for (int i = 0; i < 4; i++) { // 每三位一段转为相应的英文字符 groupText[i] = ConvertThreeDigitToWords(digitGroups[i]); } string combined = groupText[0]; for (int i = 1; i < 4; i++) { if (digitGroups[i] != 0) { // 每一段加上相应的这一段的级别数字 string prefix = groupText[i] + " " + _scaleNumbers[i]; if (!string.IsNullOrEmpty(prefix)) { if (string.IsNullOrEmpty(combined)) { combined = prefix; } else { combined = prefix + ", " + combined; } } } } if (number < 0) { combined = "Negative " + combined; } return combined; } /// <summary> /// 处理三位数以内的数字转为英文描述 /// </summary> /// <param name="threeDigits"></param> /// <returns></returns> private static string ConvertThreeDigitToWords(int threeDigits) { string groupText = ""; // 获取百位 int hundreds = threeDigits / 100; int tensUnits = threeDigits % 100; if (hundreds != 0) { groupText += _lessTwentyNumbers[hundreds] + " Hundred"; if (tensUnits != 0) { groupText += " and "; } } // 获取十位 int tens = tensUnits / 10; int units = tensUnits % 10; if (tens >= 2) { groupText += _lessHundredNumbers[tens]; if (units != 0) { groupText += " " + _lessTwentyNumbers[units]; } } else if (tensUnits != 0) { groupText += _lessTwentyNumbers[tensUnits]; } return groupText; } private static string ConvertDecimalToWords(double number) { int i = (int)number; int p = (int)((number - i) * 100); return ConvertNumberToWords(i) + " DOLLARS AND " + ConvertNumberToWords(p) + " CENTS"; } }}
上面的代码中两个核心函数是ConvertNumberToWords和ConvertThreeDigitToWords,ConvertThreeDigitToWords的作用主要是能将小于1000的整数转为相应的金额,而ConvertNumberToWords负责将不同段的金额组合成完整的金额,主要是加上了该金额对应的位,例如本程序由于只要求对20亿以内的数字进行处理,因此分为千,百万和十亿三档。理解好了这两个函数基本就能知道是怎么做的。
0 0
- 面试技能五
- 面试的五大技能
- 打动面试官的五大技能
- 打动面试官的五大技能
- 打动面试官的五大技能
- 打动面试官的五大技能
- android面试技能点
- 面试技能一
- java 技术技能 面试
- 面试技能二
- 面试技能三
- 面试技能四
- 面试技能六
- Android面试必备技能
- 面试技能点整理
- Android面试必备技能
- Android面试必备技能
- java面试必备技能
- 堆和栈的区别
- 动规基础,最长上升子序列
- MyEclipse快速开发Hibernate过程图解教程
- ssh面试精华
- GDI 画图问题集锦
- 面试技能五
- Mob推出全球免费短信验证码解决方案
- C++中指针和引用的区别
- 网络负载均衡环境下wsHttpBinding+Message Security+Windows Authentication的常见异常
- java程序设计第一课
- NYOJ 题目108 士兵杀敌(一)(水题)
- POJ--3368--Frequent values【RMQ】
- Unity3d场景加载进度条
- c++程序的内存格局