C语言 整数转换

来源:百度知道 编辑:UC知道 时间:2024/05/22 08:54:40
【问题描述】
编写一个程序,从标准输入读入一个十进制正整数,将其转换成相应的二进制、八进制和十六进制数,并以字符串形式分三行输出到标准输出。

【输入形式】
从标准输入读入一个十进制正整数。

【输出形式】
向标准输出打印三行:第一行是该正整数的二进制字符串形式;第二行是该正整数的八进制字符串形式;第三行是该正整数的十六进制字符串形式。
注意:
1. 输出的二进制、八进制和十六进制数的每一位之间用空格符分隔,但是首位之前不要加空格符,末位后有空格符;
2. 在十六进制数中使用大写字母A-F。

【输入样例】
62147
【输出样例】
1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1
1 7 1 3 0 3
F 2 C 3
【样例说明】
将62147转换成相应的二进制、八进制和十六进制数,并分三行输出。

#include <stdio.h>

int main(){
int number;
int i;
char buffer[100];

scanf("%d", &number);
sprintf(buffer, "%b", number);
for (i = 0; i < strlen(buffer); ++i) printf("%c ", buffer[i]);
sprintf(buffer, "%o", number);
for (i = 0; i < strlen(buffer); ++i) printf("%c ", buffer[i]);
sprintf(buffer, "%X", number);
for (i = 0; i < strlen(buffer); ++i) printf("%c ", buffer[i]);

}

前者的程序运行结果不符合要求,故洒家新编了一个完全符合要求的.
该程序用位运算的方法比较容易解决.我的程序如下:
#include<stdio.h>
void main()
{
long i;
char a[65];
short m,n;

scanf("%ld",&i);

for(m=64,n=0;n<32;n++)
{
a[--m]=' ';
a[--m]=(char)(i>>n&1)+'0';
}
a[64]='\0';
while(a[m]=='0'&&m<64) m+=2;
printf("%s\n",&a[m]);

for