【C语言】之''整数的N进制字符串表示''

老师平时布置的希冀系统上的作业答案,仅供参考!

【问题描述】

编写函数itob(n,s,b),用于把整数n转换成以b为基的字符串并存储到s中. 编写程序,使用函数itob(n,s,b)将输入的整数n,转换成字符串s,将s输出.转换后的字符串从最高的非零位开始输出。如果n为负数,则输出的字符串的第一个字符为“-”;。b为大于1小于37的任意自然数值。当b=2时,输出字符只可能是“0”和“1”;当b=16时,输出字符串中可能含有字符为“0-9“;,”a-f“;(字母以小写输出)。b还可以是其它数值。比如输入n=33,b=17,则输出33的17进制值为”1g”。

【输入形式】

控制台输入整数n和b,其中n可以为负数。n和b以空格分隔.

【输出形式】**

控制台输出转化后的字符串s.

【样例输入】

5 2

【样例输出】

101

【样例说明】

5的二进制就是101

【参考答案】

#include <stdio.h>
#include <string.h>

void reverse (char s[]);
void itob (int n,char s[],int b);

void itob (int n,char s[],int b){//N位一个整数,转换成B进制的字符串,存入字符串S中
int i,j,sign;
if ( ( sign = n ) < 0 ) n = - n;
i = 0;
do {
j = n % b;//任何一个数的余数不可能大于他本身
s[i++] = ( j <= 9 ) ? j + '0' : j + 'a' - 10; //j<=9 用于判定余数用2进制 8进制 或16进制表示。10:A 11:B 12:C 13:D 14:E 15:F
}while ( ( n = n / b ) > 0);

if ( sign < 0 ) s[i++] = '-' ;
s[i] = '\0' ;
reverse( s );//反向输出数字
}

void reverse (char s[]){
int i;
int len;

i = 0 ;
for ( i = ( len = strlen(s) ) ; i >=0 ; i--){
if ( s[i] != '\0') putchar( s[i] );
}
}

int main()
{
int n;
char s[5];
int b;
scanf("%d%d",&n,&b);
itob ( n , s , b ) ;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容