解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
2023-09-14 09:06:59 时间
编写一个进阶版的额进制转换程序,运行功能如下:
请选择要输入的数字的进制(2、8、10、16):
请输入该数字:
请选择要转换成的进制(2、8、10、16):
转换结果是:
注:
1、因为输入的数字要选择进制,需要判断输入的数字是否合法,比如选择了2进制,然后输入了数字34,则为不合法,需要提示错误并重新输入
2、16进制下用ABCDEF表示10~15
3、可以反复输入数字,输入0后程序结束
注意:此代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010
代码块:
#include <iostream>
#include <cstring>
#include <string.h>
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
bool radixJudge(int *num);
bool judge(char *inputNum, int *inRadix);
int transDec(char *inputNum, int *inRadix);
void transferNum(int inputNum, int *outRadix);
int main()
{
char *inputNum = new char[20];
int *inRadix = new int;
int *outRadix = new int;
cout<<"请选择要输入的数字的进制 (2、8、10、16): ";
cin>>*inRadix;
while(!radixJudge(inRadix)){
cout<<"输入进制数字错误! 请重新输入!\n请选择要输入的数字的进制 (2、8、10、16): ";
cin>>*inRadix;
}
cout<<"请输入该数字:";
cin>>inputNum;
while(*inputNum!='0'){
while(!judge(inputNum, inRadix)){
cout<<"数字与进制类型不匹配! 请重试!\n请输入该数字:";
cin>>inputNum;
}
cout<<"请选择要转换成的进制 (2、8、10、16): ";
cin>>*outRadix;
while(!radixJudge(outRadix)){
cout<<"输出进制数字错误! 请重新输入!\n请选择要转换成的进制 (2、8、10、16): ";
cin>>*outRadix;
}
transferNum(transDec(inputNum, inRadix), outRadix);
cout<<"请选择要输入的数字的进制 (2、8、10、16): ";
cin>>*inRadix;
while(!radixJudge(inRadix)){
cout<<"输入进制数字错误! 请重新输入!\n请选择要输入的数字的进制 (2、8、10、16): ";
cin>>*inRadix;
}
cout<<"请输入该数字:";
cin>>inputNum;
}
free(inputNum);
free(inRadix);
free(outRadix);
system("pause");
return 0;
}
bool radixJudge(int *num){
return (*num!=2 && *num!=8 && *num!=10 && *num!=16) ? false : true;
}
bool judge(char *inputNum, int *inRadix){
int i;
switch(*inRadix){
case 2:
for(i=0; i<strlen(inputNum); i++)
if(inputNum[i]!='0' && inputNum[i]!='1')
break;
return i==strlen(inputNum) ? true : false;
case 8:
for(i=0; i<strlen(inputNum); i++){
if(inputNum[i]<'0'||inputNum[i]>'7')
break;
}
return i==strlen(inputNum) ? true : false;
case 10:
for(i=0; i<strlen(inputNum); i++)
if(inputNum[i]<'0'||inputNum[i]>'9')
break;
return i==strlen(inputNum) ? true : false;
case 16:
for(i=0; i<strlen(inputNum); i++){
if((inputNum[i]>='0'&&inputNum[i]<='9')||(inputNum[i]>='A'&&inputNum[i]<='F')||(inputNum[i]>='a'&&inputNum[i]<='f'))
continue;
else
break;
}
return i==strlen(inputNum) ? true : false;
default: return false; break;
}
}
int transDec(char *inputNum, int *inRadix){
string str=inputNum;
int ans=0;
for(int i=0; i<str.size(); i++){
char t=str[i];
if(t>='0'&&t<='9')
ans=ans*(*inRadix)+t-'0';
else
ans=ans*(*inRadix)+t-'a'+10;
}
return ans;
}
void transferNum(int inputNum, int *outRadix){
cout<<"转换结果是:";
switch(*outRadix){
case 2:
cout<<bitset<16>(inputNum)<<endl; break;
case 8:
cout<<std::oct<<inputNum<<endl; break;
case 10:
cout<<std::dec<<inputNum<<endl; break;
case 16:
cout<<std::hex<<inputNum<<endl; break;
default: break;
}
cout<<endl;
}
实现效果如下:(只显示部分输入效果,有兴趣可以进行完整测试,确保程序无误。)
相关文章
- C++11:限定作用域的枚举类型
- C++ code:char pointers and char arrays(字符指针与字符数组)
- C++进制转换
- C++整数转二进制
- C/C++基础讲解(十八)之数据结构篇二叉树遍利与浮点数转换为字符串
- C++时间戳转换
- 混合编程:如何用pybind11调用C++
- 数制转换-栈的应用(C++实现)
- [手游新项目历程]-53-c,c++中时间戳与标准时间间的相互转换
- 【华为OD机试 2023最新 】 羊、狼、农夫过河(C++ 100%)
- 【华为OD机试 2023】 字符串解密(C++ Java JavaScript Python)
- c++每日面试之货币转换
- C++插入排序小练
- lua转让C++书面DLL达到“热更新”
- c++ 字符串转换为数字
- ubuntu18.04平台 QT5(C++)、OpenGL、DNN联合新版OpenCV5.x构建以及核心算法测试
- C/C++音频算法: noise suppression算法及技术资料汇总
- C++之const vector与vector相互转换(九十七)
- C++之vector<char>与void*相互转换(八十九)
- C++ string与vector<float>类型相互转换之stringstream(十九)
- C++ Primer 学习笔记_38_STL实践与分析(12)--集成的应用程序容器:文本查询程序
- C++的std::to_string():数值转换字符串
- 新的C++安全编码规则出炉
- VC++使用GDI+实现HBITMAP与图片文件之间的相互转换(附源码)
- C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点
- C++中字符串和数字相互转换的常用函数
- PAT 1122 C++ 版
- 整数拆分(c++,java)