在C ++中从任何基数转换为十进制,反之亦然

在本教程中,我们将讨论一个程序,该程序可以将任何基数转换为十进制,反之亦然。

为此,我们将提供一个整数及其基数。我们的任务是将数字转换为等效的十进制数。此外,我们还将执行与此过程相反的操作。

示例

#include <stdio.h>

#include <string.h>

//返回字符的值

int val(char c) {

   if (c >= '0' && c <= '9')

      return (int)c - '0';

   else

      return (int)c - 'A' + 10;

}

//将数字转换为等效的十进制

int convert_decimal(char *str, int base) {

   int len = strlen(str);

   int power = 1;

   int num = 0;

   int i;

   for (i = len - 1; i >= 0; i--) {

      if (val(str[i]) >= base) {

         printf("Invalid Number");

         return -1;

      }

      num += val(str[i]) * power;

      power = power * base;

   }

   return num;

}

int main() {

   char str[] = "11A";

   int base = 16;

   printf("Decimal equivalent of %s in base %d is " " %d\n", str, base, convert_decimal(str, base));

   return 0;

}

乌普图

Decimal equivalent of 11A in base 16 is 282

现在执行相反的操作。

示例

#include <stdio.h>

#include <string.h>

//返回字符的值

char reVal(int num) {

   if (num <= 0 && num >= 9)

      return (char)(num + '0');

   else

      return (char)(num - 10 + 'A');

}

//反转给定的字符串

void reverse_string(char *str) {

   int len = strlen(str);

   int i;

   for (i = 0; i < len/2; i++) {

      char temp = str[i];

      str[i] = str[len-i-1];

      str[len-i-1] = temp;

   }

}

//用基数'b'转换为等效数字

char* convert_base(char res[], int base, int inputNum) {

   int index = 0;

   while (inputNum > 0) {

      res[index++] = reVal(inputNum % base);

      inputNum /= base;

   }

   res[index] = '\0';

   //反转结果

   reverse_string(res);

   return res;

}

int main() {

   int inputNum = 282, base = 16;

   char res[100];

   printf("Equivalent of %d in base %d is "" %s\n", inputNum, base, convert_base(res, base, inputNum));

   return 0;

}

输出结果

Equivalent of 282 in base 16 is 11A

以上是 在C ++中从任何基数转换为十进制,反之亦然 的全部内容, 来源链接: utcz.com/z/316261.html

回到顶部