c# - 如何使用嵌套的 switch 语句将数字转换为 0 - 9999 范围内的单词
问题描述
所以我尝试修改这段代码,最多只能转换数百个
https://github.com/ivanpop/CS-for-Dummies/blob/master/Chapter%205%20Solution%2011/Program.cs
对此
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a number between 0 and 9999: ");
short number = Convert.ToInt16(Console.ReadLine());
byte thousandths = (byte)(number / 1000 | 0);
byte hundreds = (byte)(number / 100 | 0);
byte tensAndOnes;
if (number > 99)
{
tensAndOnes = (byte)(number % 100);
}
else tensAndOnes = (byte)(number * 1);
byte ones = (byte)(number % 10);
switch (thousandths)
{
case 1: Console.Write("One thousand "); break;
case 2: Console.Write("Two thousand "); break;
case 3: Console.Write("Three thousand "); break;
case 4: Console.Write("Four thousand "); break;
case 5: Console.Write("Five thousand "); break;
case 6: Console.Write("Six thousand "); break;
case 7: Console.Write("Seven thousand "); break;
case 8: Console.Write("Eight thousand "); break;
case 9: Console.Write("Nine thousand "); break;
}
if (thousandths >= 1 && hundreds >= 1) Console.Write(" and ");
if (hundreds >= 1 && hundreds < 10) Console.Write("One hundred");
else if (hundreds >= 10 && hundreds < 20) Console.Write("Two hundred");
else if (hundreds >= 20 && hundreds < 30) Console.Write("Three hundred");
else if (hundreds >= 30 && hundreds < 40) Console.Write("Four hundred");
else if (hundreds >= 40 && hundreds < 50) Console.Write("Five hundred");
else if (hundreds >= 50 && hundreds < 60) Console.Write("Six hundred");
else if (hundreds >= 60 && hundreds < 70) Console.Write("Seven hundred");
else if (hundreds >= 70 && hundreds < 80) Console.Write("Eight hundred");
else if (hundreds >= 80 && hundreds < 90) Console.Write("Nine hundred");
switch (hundreds)
{
case 1: Console.Write("One hundred "); break;
case 2: Console.Write("Two hundred "); break;
case 3: Console.Write("Three hundred "); break;
case 4: Console.Write("Four hundred "); break;
case 5: Console.Write("Five hundred "); break;
case 6: Console.Write("Six hundred "); break;
case 7: Console.Write("Seven hundred "); break;
case 8: Console.Write("Eight hundred "); break;
case 9: Console.Write("Nine hundred "); break;
}
if (hundreds >= 1 && tensAndOnes >= 1) Console.Write(" ");
if (tensAndOnes >= 20 && tensAndOnes < 30) Console.Write("Twenty");
else if (tensAndOnes >= 30 && tensAndOnes < 40) Console.Write("Thirty");
else if (tensAndOnes >= 40 && tensAndOnes < 50) Console.Write("Fourty");
else if (tensAndOnes >= 50 && tensAndOnes < 60) Console.Write("Fifty");
else if (tensAndOnes >= 60 && tensAndOnes < 70) Console.Write("Sixty");
else if (tensAndOnes >= 70 && tensAndOnes < 80) Console.Write("Seventy");
else if (tensAndOnes >= 80 && tensAndOnes < 90) Console.Write("Eighty");
else if (tensAndOnes >= 90 && tensAndOnes < 100) Console.Write("Ninety");
switch (tensAndOnes)
{
case 1: Console.Write("One"); break;
case 2: Console.Write("Two"); break;
case 3: Console.Write("Three"); break;
case 4: Console.Write("Four"); break;
case 5: Console.Write("Five"); break;
case 6: Console.Write("Six"); break;
case 7: Console.Write("Seven"); break;
case 8: Console.Write("Eight"); break;
case 9: Console.Write("Nine"); break;
case 10: Console.Write("Ten"); break;
case 11: Console.Write("Eleven"); break;
case 12: Console.Write("Twelve"); break;
case 13: Console.Write("Thirteen"); break;
case 14: Console.Write("Fourteen"); break;
case 15: Console.Write("Fifteen"); break;
case 16: Console.Write("Sixteen"); break;
case 17: Console.Write("Seventeen"); break;
case 18: Console.Write("Eighteen"); break;
case 19: Console.Write("Nineteen"); break;
}
if (tensAndOnes > 20)
{
switch (ones)
{
case 1: Console.Write("-one"); break;
case 2: Console.Write("-two"); break;
case 3: Console.Write("-three"); break;
case 4: Console.Write("-four"); break;
case 5: Console.Write("-five"); break;
case 6: Console.Write("-six"); break;
case 7: Console.Write("-seven"); break;
case 8: Console.Write("-eight"); break;
case 9: Console.Write("-nine"); break;
}
}
if (number == 0) Console.Write("Zero");
Console.ReadKey();
}
}
但是当我尝试输入 1100 它输出一千两百而不是一千零一
我必须使用嵌套的 switch 语句,因此不允许使用方法或数组
解决方案
现在您有大于 999 的数字,您需要修改计算百位的方式:
byte hundreds = (byte)((number - (1000 * thousandths)) / 100 | 0);
hundreds
当您的输入为“1100”时,这将设置为 1。
推荐阅读
- azure - 批处理作业程序是否由于日期格式拼写错误等数据问题而无法运行/崩溃?
- java - 未解决的参数化 java 类方法的编译问题
- arrays - React.js Map Array 样式用于唯一 id 并且每个按钮都被禁用
- r - 关于使用 R 进行网页抓取的 HTML 代码的困惑
- apache-flink - Flink:DataStream 左连接表。超级简单
- java - 我不能在java中使用按钮,我什至用文档方法都试过了,什么也没有
- java - 如何在 Spring Boot 2.2.0 中添加弹性搜索?
- javascript - 具有反应的 Discord.js 票务机器人
- python - 读取带有两个分隔符和特殊换行符的数据表
- php - 我想使用 php 使用文件输入从数据库中检索图像