问题链接:HDU2031 进制转换。这是一个入门训练题,自然用C语言编写程序。
问题简述:参见上述链接。
问题分析:(略)。
程序说明:需要注意的一点是,将一个10进制数转换为2进制的话,字符串可能很长,字符数组需要大一点的空间,80=20*4字符是够的,因为整数最长只有10进制19位。
本题还需要注意负数的处理!
参考链接:人们常用的是10进制,有关10进制转换,可以参见:I00028 整数逆序。
/* HDU2031 进制转换 */
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int i,j;
int c;
for(i=(s[0]=='-'?1:0),j=strlen(s)-1; i<j;i++,j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void convert(int n, int r, char *s)
{
char *t;
t = s;
// 处理负数
if(n<0) {
*t++ = '-';
n = -n;
}
while(n) {
*t = n % r;
if(*t >= 10)
*t = *t - 10 + 'A';
else
*t = *t + '0';
n /= r;
t++;
}
*t = '\0';
reverse(s);
}
int main(void)
{
int n, r;
char t[80];
while(scanf("%d%d", &n, &r) != EOF) {
convert(n, r, t);
printf("%s\n", t);
}
return 0;
}