进制转化(小bug)

//有任意进制先转化为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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值