Home > Enterprise >  Convert oct to dex integer
Convert oct to dex integer

Time:12-18

Incorrectly converts a number In the program you need to convert from octal number system to decimal "a" is a integer class field that uses the GetDex() method Construct - this.a = a;

public int GetDex()
{
    int res = 0;
    int exp = 1;
   
    for (int i = Convert.ToString(a).Length - 1; i >= 0; i--)
    {
        res  = exp * Convert.ToInt32(Convert.ToString(a)[i]);
        exp *= 8;
    }

    return res;
}

CodePudding user response:

The problem is in the

Convert.ToInt32(Convert.ToString(a)[i])

fragment. You actually add ascii codes, not digits. To get digit integer 5 from character '5' just subtract '0':

(Convert.ToString(a)[i] - '0')  

Your code corrected:

public int GetDex() 
{
    int res = 0;
    int exp = 1;

    for (int i = Convert.ToString(a).Length - 1; i >= 0; i--) 
    {
        //DONE: you should add digits, not ascii codes: - '0'
        res  = exp * (Convert.ToString(a)[i] - '0');
        exp *= 8;
    }

    return res;
}

You can put it compact with a help of Linq:

public int GetDex() => a
  .ToString()
  .Aggregate(0, (s, i) => s * 8   i - '0');
  • Related