基于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 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));
}

运行结果

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几何木偶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值