问题链接: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; }