第八类、进制转换(05 道)
1.十进制(0~2147483647)转任意进制(2 进制~16 进制)。
include <stdio.h>
void main() {
int num, radix, i = 0;
char res[32] = {0}, table[] = "0123456789ABCDEF";
printf("请输入一个十进制整数:");
scanf("%d", &num);
printf("请输入要转换为几进制:");
scanf("%d", &radix);
if (num == 0) {
res[0] = '0';
i = 1;
}
while (num > 0) {
res[i++] = table[num % radix];
num /= radix;
}
printf("转换结果:");
while (--i >= 0) {
printf("%c", res[i]);
}
}
2.任意进制(2 进制~16 进制)转十进制(0~2147483647)。
include <stdio.h>
include <string.h>
void main() {
int res = 0, radix, i, k = 1;
char num[32], table[] = "0123456789ABCDEF";
printf("请输入待转换的字符串:");
scanf("%s", &num);
printf("待转换字符串为几进制:");
scanf("%d", &radix);
for (i = strlen(num) - 1; i >= 0; i--) {
res += (strchr(table, num[i]) - table) * k;
k *= radix;
}
printf("转换结果:%d", res);
}
3.输入一个二进制字符串,将其转换为对应的十进制。
include <stdio.h>
void main() {
char s[10];
int i, n;
gets(s);
for (n = i = 0; s[i] != '\0'; i++) {
n = n * 2 + s[i] - '0';
}
printf("%d", n);
}
4.输入一个八进制字符串,将其转换为对应的十进制。
include <stdio.h>
void main() {
char s[10];
int i, n;
gets(s);
for (n = i = 0; s[i] != '\0'; i++) {
n = n * 8 + s[i] - '0';
}
printf("%d", n);
}
5.输入一个十六进制字符串,将其转换为对应的十进制。
include <stdio.h>
void main() {
char s[10];
int i, n;
gets(s);
for (n = i = 0; s[i] != '\0'; i++) {
if (s[i] >= '0' && s[i] <= '9')
n = n * 16 + s[i] - '0';
if (s[i] >= 'a' && s[i] <= 'z')
n = n * 16 + s[i] - 'a' + 10;
if (s[i] >= 'A' && s[i] <= 'Z')
n = n * 16 + s[i] - 'A' + 10;
}
printf("%d", n);
}
第九类、实际应用(27 道)