进制转化(小bug)

来源:互联网 发布:采购平台软件 编辑:程序博客网 时间:2024/05/22 15:31
//有任意进制先转化为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;}