您的位置:首页 > 编程语言 > C语言/C++

【C语言】练习3-5

2014-06-23 09:45 211 查看
题目来源:《The C programming language》中的习题P51

练习2-1: 编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成16进制整数保存在s中。

  解题思路:这题本身并不难,由于习惯性思维,我们可能会忽略一些关键性的东西。比如,对于题目中的进制数,我们一般只会考虑到有2进制、8进制和16进制,其实 还有3进制,4进制...,总的来说进制数的范围为[2,36]。还有一点,对于整数,我们可能常常考虑的是正整数。下面我们看一下具体的代码实现。

  代码实现:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* 字符串逆转 */
void reverse_itob(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;
}
}

void itob(int n, char s[], int b) {
static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i, sign;
// 判断是否位于进制数的范围
if ( b < 2 || b > 36 ) {
fprintf(stderr, "EX3_5: 不持支持进制数 %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_itob(s);
}

int main(void) {
char buffer[10];
int i;

for ( i = 2; i <= 37; ++i ) {
itob(255, buffer, i);
printf("255 转化为%-2d 进制的结果为 : %s\n", i, buffer);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: