admin管理员组

文章数量:1794759

基于C语言的各进制转换计算器程序设计

基于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)); } 运行结果

本文标签: 计算器程序设计语言各进制