进制相互转换

  1. 将十进制转换成其他进制

思考:十进制转换成th进制,采用“除th取余,逆序排序”。具体做法:用th去除十进制整数,可以得到一个商和余数;再用th去除商,又会得到商和余数,如此进行,知道商为0为止,然后进行倒置排序。

#include <stdio.h>
//将十进制n转换成th进制,然后存放在字符数组a中
void decimalToOther(int n, int th, char a[]);

int main() {

	int n, th;
	char str[101];

	scanf("%d%d", &n, &th);
	decimalToOther(n, th, str);
	puts(str);//输出

	return 0;
}

#include <string.h>

void decimalToOther(int n, int th, char a[]) {
	char ch;
	int len, k, i;

	i = 0;
	do {

		k = n % th;
		if (k >= 0 && k <= 9) {

			a[i] = k + '0'; //将数字转换为字符


		} else if (k >= 10 && k <= 15) {
			a[i] = k - 10 + 'A';

		}

		n = n / th;
		i++;
		a[i] = '\0'; //最后加上'\0',为了能作为字符串处理

	} while (n != 0);

	/*倒置处理*/
	len = strlen(a);

	for (i = 0; i < len / 2; i++) {
		ch = a[i];
		a[i] = a[len - 1 - i];
		a[len - 1 - i] = ch;
	}
}

   2、 其他进制转换成十进制

思考:”按权相加“法,如十进制的1234可以表示成:

                1234=1*10^{3}+2*10^{2}+3*10^{1}+4*10^{0}

也可以表示成:

(((0+1)*10+2)*10+3)*10+4

#include <stdio.h>
//将其他进制整数转换成十进制
int otherToDecimal(char str[], int th);

int main() {

	int m;
	char str[101];

	scanf("%s%d", str, &m);
	printf("%d\n", otherToDecimal(str, m));

	return 0;
}


int otherToDecimal(char str[], int th) {
	int i, sum;
	sum = 0;
	for (i = 0; str[i] != 0; i++) {

		if (str[i] >= '0' && str[i] <= '9') {
			sum = sum * th + (str[i] - '0');//将字符转换为数值
		} else if (str[i] >= 'A' && str[i] <= 'F') {
			sum = sum * th + (str[i] + 10 - 'A');
		}

	}
	return sum;
}

  1.  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值