- 将十进制转换成其他进制
思考:十进制转换成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可以表示成:
也可以表示成:
#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;
}