//整数转化为任意n进制的字符串(1<n<37)
#include <stdlib.h>
#include <stdio.h>
#include<string.h>
void itob(int n, char s[], int b);
void reverse(char s[]);
int main(void)
{
char buffer[10];
int i;
for ( i = 2; i <= 20; ++i )
{
itob(255, buffer, i);
printf("Decimal 255 in base %-2d : %s\n", i, buffer);
}
return 0;
}
void itob(int n, char s[], int b)
{
static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i, sign;
if ( b < 2 || b > 36 ) {
fprintf(stderr, "EX3_5: Cannot support base %d\n", b);
exit(EXIT_FAILURE);//exit函数使程序正常终止
}
//判断正负,负数变正数
if ((sign = n) < 0)
n = -n;
i = 0;
//求对应的字符
do {
s[i++] = digits[n % b];
} while ((n /= b) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);//字符串转置
}
void reverse(char s[])
{
int c, i, j;
for ( i = 0, j = strlen(s)-1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}