C#练习题答案: 写出数字【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

写出数字【难度:3级】:

答案1:

using System;

public class NumberTranslation
{
  public static string Number2Words(int n) {
    // numbers between 0 and 999999
    string result = "";
    return n/1000!=0 ?
      ( Number2Word(n/1000)+" thousand"+ (n%1000!=0 ? " "+Number2Words(n%1000) : "") ) : 
      n!=0?Number2Word(n):"zero" ;
  }
  
  private static string Number2Word(int temp) {
    string[] nWrdSp = {"","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
    string[] nWrdDc = {"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
    string result = "";
    result += temp/100>0? nWrdSp[temp/100]+" hundred " : "" ;
    result += temp%100>0? (temp%100<20? 
          nWrdSp[temp%100]+" " : nWrdDc[(temp%100)/10]+(temp%10!=0? "-"+nWrdSp[temp%10]: "") )
          : "";
    
    return result.Trim();
  }
}

答案2:

using System.Collections.Generic;
using System.Linq;

public class NumberTranslation
{
  private static IDictionary<int, string> wordMap = new Dictionary<int, string>()
        {
            [0] = "zero",
            [1] = "one",
            [2] = "two",
            [3] = "three",
            [4] = "four",
            [5] = "five",
            [6] = "six",
            [7] = "seven",
            [8] = "eight",
            [9] = "nine",
            [10] = "ten",
            [11] = "eleven",
            [12] = "twelve",
            [13] = "thirteen",
            [14] = "forteen",
            [15] = "fifteen",
            [16] = "sixteen",
            [17] = "seventeen",
            [18] = "eighteen",
            [19] = "nineteen",
            [20] = "twenty",
            [30] = "thirty",
            [40] = "forty",
            [50] = "fifty",
            [60] = "sixty",
            [70] = "seventy",
            [80] = "eighty",
            [90] = "ninety",
        };

        private class Number
        {
            public Number(int hundreds, int tens, int ones)
            {
                Hundreds = hundreds;
                Tens = tens;
                Ones = ones;
            }

            public int Hundreds { get; }
            public int Tens { get; }
            public int Ones { get; }
        }

        private static bool HasThousands(int n) => n / 1000 >= 1;

        private static string Concat(params string[] strings) => string.Join(" ", strings.Where(s => !string.IsNullOrEmpty(s)));

        public static string Number2Words(int n)
        {
            if (n <= 20)
                return wordMap[n];

            string numberAsWords = string.Empty;

            if (HasThousands(n))
                numberAsWords = Concat(numberAsWords, Handle3Digits(n / 1000), "thousand");

            numberAsWords = Concat(numberAsWords, Handle3Digits(n % 1000));

            return numberAsWords;
        }

        private static string Handle3Digits(int n)
        {
            string numberAsWord = string.Empty;

            var number = new Number(
                (n / 100),      //Hundreds
                (n / 10) % 10,  //Tens
                n % 10          //Ones
            );

            if (number.Hundreds != 0)
                numberAsWord = Concat(numberAsWord, wordMap[number.Hundreds], "hundred");

            if (number.Tens != 0)
            {
                if (wordMap.ContainsKey(number.Tens * 10 + number.Ones))
                    return Concat(numberAsWord, wordMap[number.Tens * 10 + + number.Ones]);
                else
                    return Concat(numberAsWord, $"{wordMap[number.Tens * 10]}-{wordMap[number.Ones]}");
            }

            if (number.Ones != 0)
                return Concat(numberAsWord, wordMap[number.Ones]);

            return numberAsWord;
        }
}

答案3:

public class NumberTranslation
{
    public static string Number2Words(int n) => (n <= 0) ? "zero" : N2W(n);

    private static string N2W(int n)
    {
        var o = new[] { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
            "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
        var t = new[] { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
        (int p, string s) = (n < 1000) ? (100, " hundred ") : (1000, " thousand ");
        
        return (n < 20) ? o[n] :
               (n < 100) ? string.Join((n % 10 == 0) ? "" : "-", t[n / 10], o[n % 10]) :
                           string.Join(s, N2W(n / p), N2W(n % p)).Trim();                
    }        
}

答案4:

public class NumberTranslation
{
  public static string Number2Words(int n)
  {
    return number2Words(n).Length==0 ? "zero" : number2Words(n);
  }
  public static string number2Words(int n)
  {
    string[] m = {"","one","two","three","four","five","six","seven","eight","nine","ten",
    "eleven","twelve","thir","four","fif","six","seven","eigh","nine","twen","for"};
    string word = (n > 999) ?  " thousand " : "";
    if (n == 0) return m[n];
    int x = n%1000, z = x%10;
    if (x == 0) 
      return (number2Words(n/1000) + word).Trim();
    if (x > 99) { word += m[x/100] + " hundred "; x %= 100; }
    if (x == 0) 
      return (number2Words(n/1000) + word).Trim();
    if (x < 13) return number2Words(n/1000) + word + m[x];
    if (x < 20) return number2Words(n/1000) + word + m[x] + "teen";
    if (x > 19 &amp;&amp; 30 > x) word += m[20] + "ty-" + m[z];
    if (x > 29 &amp;&amp; 40 > x) word += m[13] + "ty-" + m[z];
    if (x > 39 &amp;&amp; 50 > x) word += m[21] + "ty-" + m[z];
    if (x > 49) word += m[10+x/10] + "ty-" + m[z];
    word = n > 999 ? number2Words(n/1000) + word : word;
    return word[word.Length-1] == '-' ? word.Substring(0,word.Length-1) : word;
  }
}

答案5:

public class NumberTranslation
{
  static string[] numberNames = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
  static string[] tenNames = { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };

  public static string Number2Words(int n)
  {  
    var output = n > 0 ? "" : "zero";

    if (n >= 1000)
    {
      output += Number2Words(n / 1000) + " thousand ";
      n %= 1000;
    }

    if (n >= 100)
    {
      output += Number2Words(n / 100) + " hundred ";
      n %= 100;
    }

    if (n > 0 &amp;&amp; n < 20)
    {
      output += numberNames[n];
    }
    else if (n >= 20 &amp;&amp; n < 100)
    {      
      output += tenNames[n / 10];
      n %= 10;
      output += n > 0 ? "-" + numberNames[n] : " ";
    }

    return output.Trim();
  }
}

答案6:

public class NumberTranslation
{
  public static string Number2Words(int n)
  {
    if (n >= 1000)
    {
      var remainder = n % 1000;
      
      if (remainder == 0)
      {
        return Number2Words(n / 1000) + " thousand";
      }
      else
      {
        return Number2Words(n / 1000) + " thousand " + Number2Words(remainder);
      }        
    }
    
    if (n >= 100)
    {
      var remainder = n % 100;
      
      if (remainder == 0)
      {
        return Number2Words(n / 100) + " hundred";
      }
      else
      {
        return Number2Words(n / 100) + " hundred " + Number2Words(remainder);
      }  
    }
    
    if (n >= 20)
    {
      var remainder = n % 10;
      
      if (remainder == 0)
      {
        return Tens[(n / 10) - 2];
      }
      else
      {
        return Tens[(n / 10) - 2] + "-" + Number2Words(remainder);
      }
    }
    
    return SubTwenty[n];
  }
  
  private static readonly string[] Tens = new string[] { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
  
  private static readonly string[] SubTwenty = new string[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
    "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
}

答案7:

using System;
using System.Text;

public class NumberTranslation
{
  public static string Number2Words(int n)
  {
    if(n == 0) return "zero";
    var sb = new StringBuilder();
    bool flag = false;
    
    if(n == 0) return sb.ToString().TrimEnd();
    if(n % 100 > 9 &amp;&amp; n % 100 < 20)
    {
      sb.Insert(0, getDecade(ref n));
      flag = true;
    }
    else
    {
      sb.Insert(0, getSingles(ref n, ref flag));
      bool hadsingle = flag;
      string dec = getDecades(ref n, ref flag);
      if(flag &amp;&amp; hadsingle)
        sb.Insert(0, "-");
      sb.Insert(0, dec);
    }
    if(n == 0) return sb.ToString().TrimEnd();
    
    var hund = getSingles(ref n, ref flag);
    if(flag)
      sb.Insert(0, hund + " hundred ");
    
    if(n == 0) return sb.ToString().TrimEnd();
    
    sb.Insert(0, " thousand ");
    if(n % 100 > 9 &amp;&amp; n % 100 < 20)
    {
      sb.Insert(0, getDecade(ref n));
      flag = true;
    }
    else
    {
      sb.Insert(0, getSingles(ref n, ref flag));
      bool hadsingle = flag;
      string dec = getDecades(ref n, ref flag);
      if(flag &amp;&amp; hadsingle)
        sb.Insert(0, "-");
      sb.Insert(0, dec);
    }
    if(n == 0) return sb.ToString().TrimEnd();
    
    hund = getSingles(ref n, ref flag);
    if(flag)
      sb.Insert(0, hund + " hundred ");
      
    return sb.ToString().TrimEnd();
  }
  
  private static string getSingles(ref int n, ref bool flag)
  {
    int d = n % 10;
    n /= 10;
    flag = true;
    switch(d)
    {
      case 1: return "one";
      case 2: return "two";
      case 3: return "three";
      case 4: return "four";
      case 5: return "five";
      case 6: return "six";
      case 7: return "seven";
      case 8: return "eight";
      case 9: return "nine";
    }
    flag = false;
    return String.Empty;
  }
  private static string getDecades(ref int n, ref bool flag)
  {
    int d = n % 10;
    n /= 10;
    flag = true;
    switch(d)
    {
      case 2: return "twenty";
      case 3: return "thirty";
      case 4: return "forty";
      case 5: return "fifty";
      case 6: return "sixty";
      case 7: return "seventy";
      case 8: return "eighty";
      case 9: return "ninety";
    }
    flag = false;
    return String.Empty;
  }
  
  private static string getDecade(ref int n)
  {
    int d = n % 100;
    n /= 100;
    switch(d)
    {
      case 10: return "ten";
      case 11: return "eleven";
      case 12: return "twelve";
      case 13: return "thirteen";
      case 14: return "fourteen";
      case 15: return "fiveteen";
      case 16: return "sixteen";
      case 17: return "seventeen";
      case 18: return "eighteen";
      case 19: return "nineteen";
    }
    return String.Empty;
  }
}

答案8:

using System;
using System.Text;
using System.Collections.Generic;
public class NumberTranslation
{
  public static string Number2Words(int number)
  {
      StringBuilder res = new StringBuilder();
      Dictionary<int, string> dict = new Dictionary<int, string>()
      {
          {0,"zero"}, {1,"one"}, {2, "two"}, {3,"three"}, {4,"four"},
          {5,"five"},{6,"six"},{7,"seven"}, {8,"eight"}, {9,"nine"},
          {10,"ten"}, {11,"eleven"}, {12,"twelve"}, {13,"thirteen"},
          {14,"fourteen"}, {15,"fifteen"}, {16,"sixteen"},
          {17,"seventeen"}, {18,"eighteen"}, {19,"nineteen"},
          {20,"twenty"}, {30,"thirty"}, {40,"forty"}, {50,"fifty"},
          {60,"sixty"}, {70,"seventy"}, {80,"eighty"}, {90,"ninety"},
          {100,"hundred"}, {1000,"thousand"}
      };
      int tmp = 0;
      Action<int> part100 = (int num) =>
      {
          tmp = num % 10;
          if (tmp != 0)
              res.AppendFormat("{0}-{1}", dict[num - tmp], dict[tmp]);
          else
              res.Append(dict[num]);
      };
      
      if (number == 0)
           return "zero";

      if (number < 1000000 &amp;&amp; number > 100000)
      {
          tmp = (int)number / 1000;
          number -= tmp * 1000;
          res.AppendFormat("{0} {1} ", dict[(int)tmp/100], dict[100]);
          tmp -= (int)tmp / 100 * 100;
          part100(tmp);
          res.AppendFormat(" {0} ", dict[1000]);
      }

      if (number < 100000 &amp;&amp; number > 10000)
      {
          tmp = (int)number / 1000;
          number -= tmp * 1000;
          part100(tmp);
          res.AppendFormat(" {0} ", dict[1000]);
      }

      if (number < 10000 &amp;&amp; number >= 1000)
      {
          tmp = (int)number / 1000;
          res.AppendFormat("{0} {1} ", dict[tmp], dict[1000]);
          number -= tmp * 1000;
      }

      if (number < 1000 &amp;&amp; number >= 100)
      {
          tmp = (int)number / 100;
          res.AppendFormat("{0} {1} ", dict[tmp], dict[100]);
          number -= tmp * 100;
      }

      if (number < 100 &amp;&amp; number > 20)
      {
          part100(number);
      }

      if (number <= 20 &amp;&amp; number != 0)
      {
          res.Append(dict[number]);
      }
      return res.ToString().TrimEnd(' ');
  }
}

答案9:

using System;

public class NumberTranslation
{
  public static string Number2Words(int n)
  {
    if (n == 0)
      return "zero";
    
    string words = "";
    
    if ((n / 1000000) > 0)
    {
      words += Number2Words(n / 1000000) + " million ";
      n %= 1000000;
    }
    
    if ((n / 1000) > 0)
    {
      words += Number2Words(n / 1000) + " thousand ";
      n %= 1000;
    }
    
    if ((n / 100) > 0)
    {
      words += Number2Words(n / 100) + " hundred ";
      n %= 100;
    }
    
    if (n > 0)
    {
      string[] units = new string[] {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
      string[] tens = new string[] {"zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
      
      if (n < 20)
        words += units[n];
      else
      {
        words += tens[n / 10];
        
        if ((n % 10) > 0)
          words += "-" + units[n % 10];
      }
    }
    
    return words.Trim();
    
  }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 2.C#中的委托是什么?事件是不是一种委托? 答 :委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托。 3.override与重载的区别 答 :overrider与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。 Overrider是进行基类中函数的重写。为了适应需要。 4.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 5.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 6.请编程实现一个冒泡排序算法? 答: int [] array = new int[] {1,3,5,8,0,2,3,10,8,10}; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array[i]) { temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值