老师平时布置的希冀系统上的作业答案,仅供参考!
【问题描述】
编写函数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
暂无评论内容