21xrx.com
2024-11-22 09:43:36 Friday
登录
文章检索 我的文章 写文章
C++数制转换代码(附源码)
2023-06-26 13:07:48 深夜i     --     --
C++ 数制转换 代码 源码

在计算机科学中,数制是指表示数字的方式,如二进制、八进制、十进制和十六进制。程序员和计算机科学家经常需要进行数制转换,以便更好地理解数据和解决问题。在本文中,我们将介绍如何使用C++编写数制转换代码,并附上源码。

首先,我们来看如何将十进制数转换为其他进制。以下是一个将十进制数转换为二进制数的函数:


void decimalToBinary(int decimal) {

  int remainder;

  if (decimal <= 1)

    cout << decimal;

    return;

  

  remainder = decimal % 2;

  decimalToBinary(decimal / 2);

  cout << remainder;

}

这个函数采用递归的方法将十进制数转换为二进制数。如果数字小于2,直接输出数字。否则,它将计算十进制除以2的余数,并以此为参数调用自身(也就是调用递归函数)。递归函数一直被调用,知道数字小于2为止,然后逐个输出结果。

接下来,我们来看如何将二进制数转换为其他进制数,以下是一个将二进制数转换为十进制数的函数:


int binaryToDecimal(long long binary) {

  int decimal = 0, base = 1;

  while (binary > 0) {

    int lastDigit = binary % 10;

    binary /= 10;

    decimal += lastDigit * base;

    base *= 2;

  }

  return decimal;

}

该函数采用了循环语句来将二进制数转换为十进制数。它首先将变量decimal设置为0,将变量base设置为1。然后开始一个while循环,该循环将不断地从二进制数的末位开始逐个取出数字。它将末位数字存储在变量lastDigit中,然后从二进制数中删除末位数字。接下来,它将lastDigit乘以base,并将结果添加到decimal变量中。最后,将base乘以2,以便处理下一位数字。

除了以上两个函数外,还可以编写其他数制转换的函数,如将八进制和十六进制转换为十进制以及将十进制转换为八进制和十六进制等。

下面是完整的源代码,包括上述函数以及其他的数制转换函数:


#include <iostream>

#include <cmath>

using namespace std;

// Function to convert decimal to binary

void decimalToBinary(int decimal) {

  int remainder;

  if (decimal <= 1)

    cout << decimal;

    return;

  

  remainder = decimal % 2;

  decimalToBinary(decimal / 2);

  cout << remainder;

}

// Function to convert binary to decimal

int binaryToDecimal(long long binary) {

  int decimal = 0, base = 1;

  while (binary > 0) {

    int lastDigit = binary % 10;

    binary /= 10;

    decimal += lastDigit * base;

    base *= 2;

  }

  return decimal;

}

// Function to convert decimal to octal

void decimalToOctal(int decimal) {

  int octal[100];

  int index = 0;

  while (decimal > 0) {

    octal[index++] = decimal % 8;

    decimal /= 8;

  }

  for (int i = index - 1; i >= 0; i--)

    cout << octal[i];

}

// Function to convert octal to decimal

int octalToDecimal(int octal) {

  int decimal = 0, base = 0;

  while (octal != 0) {

    decimal += (octal % 10) * pow(8, base++);

    octal /= 10;

  }

  return decimal;

}

// Function to convert decimal to hexadecimal

void decimalToHexadecimal(int decimal) {

  char hexadecimal[100];

  int index = 0;

  while (decimal > 0) {

    int remainder = decimal % 16;

    if (remainder < 10)

      hexadecimal[index++] = 48 + remainder;

    else

      hexadecimal[index++] = 55 + remainder;

    decimal /= 16;

  }

  for (int i = index - 1; i >= 0; i--)

    cout << hexadecimal[i];

}

// Function to convert hexadecimal to decimal

int hexadecimalToDecimal(char hexadecimal[]) {

  int decimal = 0, base = 0;

  int length = strlen(hexadecimal);

  for (int i = length - 1; i >= 0; i--) {

    if (hexadecimal[i] >= '0' && hexadecimal[i] <= '9') {

      decimal += (hexadecimal[i] - 48) * pow(16, base++);

    }

    else if (hexadecimal[i] >= 'A' && hexadecimal[i] <= 'F') {

      decimal += (hexadecimal[i] - 55) * pow(16, base++);

    }

    else if (hexadecimal[i] >= 'a' && hexadecimal[i] <= 'f') {

      decimal += (hexadecimal[i] - 87) * pow(16, base++);

    }

  }

  return decimal;

}

int main() {

  int decimalNumber;

  long long binaryNumber;

  // Test decimal to binary conversion

  cout << "Enter a decimal number: ";

  cin >> decimalNumber;

  cout << "Binary conversion: ";

  decimalToBinary(decimalNumber);

  cout << endl;

  // Test binary to decimal conversion

  cout << "Enter a binary number: ";

  cin >> binaryNumber;

  cout << "Decimal conversion: " << binaryToDecimal(binaryNumber);

  cout << endl;

  // Test decimal to octal conversion

  cout << "Enter a decimal number: ";

  cin >> decimalNumber;

  cout << "Octal conversion: ";

  decimalToOctal(decimalNumber);

  cout << endl;

  // Test octal to decimal conversion

  int octalNumber;

  cout << "Enter an octal number: ";

  cin >> octalNumber;

  cout << "Decimal conversion: " << octalToDecimal(octalNumber);

  cout << endl;

  // Test decimal to hexadecimal conversion

  cout << "Enter a decimal number: ";

  cin >> decimalNumber;

  cout << "Hexadecimal conversion: ";

  decimalToHexadecimal(decimalNumber);

  cout << endl;

  // Test hexadecimal to decimal conversion

  char hexadecimal[100];

  cout << "Enter a hexadecimal number: ";

  cin >> hexadecimal;

  cout << "Decimal conversion: " << hexadecimalToDecimal(hexadecimal);

  return 0;

}

这段代码包括了以上介绍的所有数制转换函数,以及在main函数中进行测试。在运行程序时,它将要求用户输入要转换的数字,然后输出转换后的结果。

总结

数制转换是程序员和计算机科学家必备的技能之一。在本文中,我们讨论了如何使用C++编写各种数制转换函数,并附上了完整的源代码。你可以在这份代码的基础上学习和开发更多的数制转换函数,以适应自己的需要。祝你在编写数制转换代码时,顺利解决问题!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复