• 进制之间的任意转换


    • 进制之间的任意转换

    一、10进制数转换任意进制的数

    基本思路:求余数,直到被除数/进制=0,然后按逆序排列。

        C#:

     

     1  static void TestMath_6(string number, int scale)
     2         {
     3             int length = number.Length;
     4             int num = 0;
     5             int gt = 0;
     6             for (int i = 0; i < length; i++)
     7             {
     8                 if (number[i] >= 'a')
     9                 {
    10                     gt = number[i] - 'a' + 10;
    11                 }
    12                 else if (number[i] >= 'A')
    13                 {
    14                     gt = number[i] - 'A' + 10;
    15                 }//每个位置的数
    16                 else if (number[i] >= '0')
    17                 {
    18                     gt = number[i] - '0';
    19 
    20                 }
    21                 num += gt * (int)(Math.Pow(scale, (length - i - 1)));
    22             }
    23             Console.WriteLine("{0}={1}", number, num);
    24 
    25         }
     1 //优化代码
     2         static void TestMath_5(int number, int scale)//number除数,scale进制
     3         {
     4             int mynumber = number;
     5             string mystr = null;
     6             char[] mychar = new char[100];
     7             int j = 0;
     8              do 
     9              {
    10                  if (number % scale < 10) { mychar[j++] = (char)(number % scale + '0'); }
    11                  else { mychar[j++] = (char)(number % scale - 10 + 'A'); }
    12                  number = number / scale;
    13              } while (number / scale!=0);
    14             for (int i = 1; i <= j; i++)
    15             {
    16                 mystr += mychar[j - i];
    17             }
    18             Console.WriteLine("{0}={1}", mynumber, mystr);
    19         }

     

        VB.NET:

     

    Sub TestMath_5(number As Integer, scale As Integer)
    
            Dim mynumber As Integer = number
            Dim mystr As String = Nothing
            Dim mychar(100) As Char
            Dim i, j As Integer
            While (number >= scale)
                If (number Mod scale < 10) Then
                    mychar(i) = ChrW(number Mod scale + AscW("0"))
                Else
                    mychar(i) = ChrW(number Mod scale - 10 + AscW("A"))
                End If
    
                i += 1
                number = Math.Truncate(number / scale)
    
            End While
    
            If (number < scale) Then
    
                If (number Mod scale < 10) Then
                    mychar(i) = ChrW(number Mod scale + AscW("0"))
                Else
                    mychar(i) = ChrW(number Mod scale - 10 + AscW("A"))
                End If
            End If
    
            For j = 0 To i
                mystr += mychar(i - j)
            Next
    
            Console.WriteLine("{0}={1}", mynumber, mystr)

     

     

    二、任意进制的数转换10进制数

    基本思路:对对应加权位上的数*对应的加权值,然后全部加起来。

         C#:

     1  static void TestMath_6(string number, int scale)
     2         {
     3             int length = number.Length;
     4             int num = 0;
     5             int gt = 0;
     6             for (int i = 0; i < length; i++)
     7             {
     8                 if (number[i] >= 'a')
     9                 {
    10                     gt = number[i] - 'a' + 10;
    11                 }
    12                 else if (number[i] >= 'A')
    13                 {
    14                     gt = number[i] - 'A' + 10;
    15                 }
    16 
    17                 //每个位置的数
    18                 else if (number[i] >= '0')
    19                 {
    20                     gt = number[i] - '0';
    21                 }
    22                 num += gt * (int)(Math.Pow(scale, (length - i - 1)));
    23             }
    24             Console.WriteLine("{0}={1}", number, num);
    25 
    26         }

        VB.NET:

     

     1 Sub TestMath_6(number As String, scale As Integer)
     2 
     3         Dim num As Integer = 0 '返回的数
     4         Dim gt As Integer = 0 '每个加权位上的值
     5         Dim length As Integer = number.Length
     6         For i = 0 To length - 1
     7             If (number(i) >= "a") Then
     8                 gt = CInt(AscW(number(i))) - AscW("a") + 10
     9             ElseIf (number(i) >= "A") Then
    10                 gt = CInt(AscW(number(i))) - AscW("A") + 10
    11             ElseIf (number(i) >= "0") Then
    12                 gt = CInt(AscW(number(i))) - 48
    13             End If
    14 
    15             num += gt * (CInt(scale ^ (length - i - 1)))
    16         Next
    17         Console.WriteLine("{0}={1}", number, num)
    18     End Sub

     

     

  • 相关阅读:
    DataItem,gridview,repeater数据控件数据绑定
    repeater没有数据显示暂无数据,无记录
    Javascript操作Cookie的脚本 — CookieHelper
    <script>标签应该放到</body>标签之前
    IEnumerable 和 IQueryable 区别
    【three.js练习程序】鼠标滚轮缩放
    【three.js练习程序】动画效果,100个方块随机运动
    【three.js练习程序】随机生成100个方块
    树莓派练习程序(寻迹模块)
    树莓派练习程序(声音检测)
  • 原文地址:https://www.cnblogs.com/dongweian/p/7822261.html
Copyright © 2020-2023  润新知