您的位置:首页 > 其它

进制转化(小bug)

2017-06-22 14:13 183 查看
//有任意进制先转化为10进制,再转化为另一进制的代码

//但在检查输入的是否是正确的数时,有一点bug,过几天再解决!

//101101011 2 8    结果为:553

//76450273 8 2      结果为:111110100101000010111011

//aabc89d 16 10   结果为:179030173

#include<stdio.h>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;

bool check(char buf[], int D){      //对输入进来的数进行检查,看是否有不满足的
//如2进制,你输入一个:1012110,就是错误的了
int n;//buf[]中每一位的int型数字
for (int i = 0; i < strlen(buf); i++){
if (buf[i] >= 'a'&&buf[i] <= 'z')
n = buf[i] - '0' - 39;
else if (buf[i] >= 'A'&&buf[i] <= 'Z')
n = buf[i] - '0' - 7;
else if (buf[i] >= '0'&&buf[i] <= '9')
n = buf[i] - '0';
if (n >= D|| n < 0)
return false;
}
return true;
}

int to_Ten(char buf[], int D){
int n;
int num = 0;//10进制下的值
if (check(buf, D)){
for (int i = 0; i < strlen(buf); i++){
if (buf[i] >= 'a'&&buf[i] <= 'z')
n = buf[i] - '0' - 39;
else if (buf[i] >= 'A'&&buf[i] <= 'Z')
n = buf[i] - '0' - 7;
else if (buf[i] >= '0'&&buf[i] <= '9')
n = buf[i] - '0';
num += n*pow(double(D), double(strlen(buf) - i - 1));
}
return num;
}
else
{
printf("输入错误,有大于%d的数字\n", D);
}
}
vector<int> to_Decimal(int data_10, int D, vector<int> &v){
v.clear();
if (data_10 == 0)
printf("0");
while (data_10 != 0){
v.push_back(data_10%D);
data_10 /= D;
}
return v;
}

int main(){
char buf[12]; //存放任意进制的数字
int D1; //转化前数的进制
int D2; //转化后数的进制
int data_10;//10进制下的值
int data_other;//D2进制的结果值
vector<int> v;
//freopen("D://input.txt", "r", stdin);
printf("输入你的当前进制下的数据:");
while (scanf("%s", buf) != EOF){
printf("输入这个数的进制:");
scanf("%d", &D1);
printf("输入你要转换的进制:");
scanf("%d", &D2);
data_10 = to_Ten(buf, D1); //将任意进制的数转化为10进制
v = to_Decimal(data_10, D2, v);//将10进制的数转化为D2进制下的数
printf("该%d进制下的结果为:", D2);
for (int i = v.size() - 1; i >= 0; i--){
printf("%d", v[i]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息