您的位置:首页 > 其它

习题 ct9_1:进制转换☆

2010-07-26 21:48 232 查看
/*
题目描述:
编写一个NumConvert函数,要求声明为int NumConvert(int n, int k);
功能是把传入的参数n按照k进制进行转换并输出结果

输入:
按参数传递,2<=k<=36,n在int的范围内

输出:
按参数传递输入,通过标准输出,输出相应的结果
输出的结果应当不包含换行
如果超出10,应当用大写字母依次表示
函数执行成功则应当返回0值

样例输入:
2 2
9 4
31 16
-31 16

样例输出:
10
21
1F
-1F

其它:
请不要写上main函数

难度:for beginner
*/

#include <cstdio>

int NumConvert(int n, int k)
{
char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char result[100] = {0};
int i = 0;
unsigned num = n;	// 这题就这里需要特别注意
// 要用一个比int范围大的变量类型来装要转换的数
// 因为int最小值的绝对值要比最大值大1, 无法对最小值求反
// 而且要特别特别注意的是, 不能用long, 因为在现在的编译器里long和int是一样大的!! 都是4个字节!!

if( n < 0 )
{
num = -n;
printf("-");
}

do
{
result[i] = digits[num % k];
num /= k;
i++;
} while( num != 0 );

for( i--; i >= 0; i-- )
printf("%c", result[i]);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: