zoukankan      html  css  js  c++  java
  • 进制之间的任意转换

    • 进制之间的任意转换

    一、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

     

     

  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/dongweian/p/7822261.html
Copyright © 2011-2022 走看看