编写函数itob(n,s,b)将整数n转换为以b为底的数。 并将转换结果以字符的形式保存到字符串s中。 1. 主要是这两句: char digits[] = "0123456789abcdef"; 还有 s[i++] = digits[n % b]; 让下标和对应进制的底数对应起来。 void itob(int n, char s[], int b) { int i; char digits[] = "0123456789abcdef"; i = 0; // do // { // s[i++] = n % b + '0'; // if((c=s[i])> 9) // s[i]=c+('a'-10); //将10--15转化成'a'--'f' // } // while(n /= b); /*reply from csdner's*/ do { s[i++] = digits[n % b]; }while(n /= b); s[i] = '\0'; reverse(s); } 2. From Answer Book 主要是do-while部分加了条件表达式,很简练。 do { j = n % b; s[i++] = (j <= 9) ? j + '0' : j + 'a' - 10; } while((n /= b) > 0); 3. 英文版答案 /* Stores a string representation of integer n in s[], using a numerical base of b. Will handle up to base-36 before we run out of digits to use. */ 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); } 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); }