基於C語言的各進制轉換計算器程序設計

題目需求:

  • 編寫一個程序,實現二進制、八進制、十進制、十六進制的相互轉換。
    提示:輸入的數值後面的字母表示進制數,56D便是十進制的56,72O便是八進制的72,ACH便是十六進制的AC。
  • 示例
輸入:56D
輸出:HEX[38]
      DEC[56]
      OCT[70]
      BIN[00111000]
輸入:ACH
輸出:HEX[AC]
      DEC[172]
      OCT[254]
      BIN[10101100]
輸入:72Q
輸出:HEX[3A]
      DEC[58]
      OCT[72]
      BIN[00111010]
輸入:00011010B
輸出:HEX[1A]
      DEC[26]
      OCT[32]
      BIN[00011010]

程序設計

  • 這裏的輸入數據並非真實的進制數,輸入採用的是字符串的形式。例如:二進制“11001010B”,八進制“26Q”,十進制“56D”,十六進制“7CH”。在進制數後面加上進制數標識符以便區分。
  • 通過Funtion(char* array,int len)函數求得的數是10進制數,也就是int型數據。形參array是要傳入的進制字符串數據,也就是上面提到的諸如“11001010B”這種風格的進制數,形參len則是字符串長度。
  • DecToAny(int n, int m)函數則是十進制數轉任意進制數,形參n爲輸入的數據,形參m爲要轉成m進制的意思。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int Funtion(char *array,int len)
{
	int *d = (int*)malloc(len * sizeof(int));
	int num;//進制數
	int sum=0;
	switch (array[len-1])
	{
		case 'B'://2進制轉10進制
		{
			for (int i = len - 2; i >= 0; i--)
			{
				sum += (array[i]-'0') * pow(2, len - i - 2);
			}
			break;
		}
		case 'Q'://8進制轉10進制
		{
			for (int i = len - 2; i >= 0; i--)
				sum += (array[i] - '0')*pow(8, len - i - 2);
			break;
		}
		case 'D'://將字符串型的數轉成int型十進制數
		{
			for (int i = 0; i < len-1; i++)
				sum += (array[i] - '0')*pow(10, len - i - 2);
			break;
		}
		case 'H'://16進制轉10進制
		{
			for (int i = len - 2; i >= 0; i--)
			{
				if (array[i] > 47 && array[i] < 58)             //0~9
					sum += (array[i] - 48)*pow(16, len - i - 2);
				else if (array[i] > 64 && array[i] < 71)        //A~F
					sum += (array[i] - 55)*pow(16, len - i - 2);
				else if (array[i] > 96 && array[i] < 103)       //a~f
					sum += (array[i] - 87)*pow(16, len - i - 2);
			}
			break;
		}
		default:break;
	}
	return sum;
}
int DecToAny(int n, int m)// n表示數據,m表示要轉成m進制
{
	if (n < m) return n;
	else return DecToAny(n / m, m) * 10 + n % m;
}
int main(void)
{
	int Length;//數組長度
	int s;
	char *Data = (char*)malloc(9 * sizeof(char));//數據字符串數組
	gets(Data);//輸入數據
	Length = strlen(Data);
	s=Funtion(Data,Length);//功能函數
	printf("HEX[%X]\nDEC[%d]\nOCT[%o]\nBIN[%d]\n",s,s,s,DecToAny(s,2));
}

運行結果

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章