入门模拟 - 数制转换 (codeup编号100000579 B )
作者:互联网
#include <stdio.h>
#include <string.h>
/**
* 题目描述
* 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
* 不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
* 输入
* 输入只有一行,包含三个整数a,n,b。
* a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。
* a,b是十进制整数,2 =< a,b <= 16。
* 输出
* 可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。
* 输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
* 样例输入 Copy
4 123 10
* 样例输出 Copy
27
*/
/**
* 将ary进制转为十进制,因为有可以大于十进制,所以要做一些处理
* @Author dust_fall
* @param numStr 数字字符串
* @param ary 几进制
* @return 转换后的十进制数
*/
int toDecimal(char* numStr, int ary)
{
int x = 0, product = 1;
int i;
for (i = strlen(numStr) - 1; i >= 0; i--)
{
int num;
switch(numStr[i])
{
case 'A':
case 'a':
num = 10;
break;
case 'B':
case 'b':
num = 11;
break;
case 'C':
case 'c':
num = 12;
break;
case 'D':
case 'd':
num = 13;
break;
case 'E':
case 'e':
num = 14;
break;
case 'F':
case 'f':
num = 15;
break;
default:
num = numStr[i] - '0';
}
x = x + num * product;
product = product * ary;
}
return x;
}
int main(int argc, char const *argv[])
{
int a, b;
char n[32];
char chs[17][16] =
{
{0},{0},
{'0', '1'},
{'0', '1', '2'},
{'0', '1', '2', '3'},
{'0', '1', '2', '3', '4'},
{'0', '1', '2', '3', '4', '5'},
{'0', '1', '2', '3', '4', '5', '6'},
{'0', '1', '2', '3', '4', '5', '6', '7'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E'},
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}
};
while (scanf("%d%s%d", &a, n, &b) != EOF)
{
int num = 0;
char ans[32];
int i;
// x为a进制n的十进制值
int x = toDecimal(n, a);
// 将十进制转为b进制
do
{
ans[num++] = chs[b][x % b];
x /= b;
}while(x != 0);
for (i = num - 1; i >= 0; i--)
{
printf("%c", ans[i]);
}
printf("\n");
}
return 0;
}
标签:case,数制,进制,int,100000579,整数,break,num,codeup 来源: https://blog.csdn.net/dust_fall/article/details/113760846