Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แปลงจากฐานใดก็ได้เป็นฐานสิบและกลับกันใน C++

ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมแปลงจากฐานใดก็ได้เป็นฐานสิบ (decimal) และกลับกัน

สำหรับนี้ เราจะได้รับจำนวนเต็มและฐานของมัน งานของเราคือแปลงตัวเลขเป็น decimal equivalent ต่อไปเราจะทำย้อนกลับของขั้นตอนนี้ด้วย

โปรแกรมตัวอย่าง (แปลงเป็นฐานสิบ)

#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;
}

// แปลงตัวเลขเป็น decimal equivalent
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