求助C语言高手 二进制与十进制的互转

来源:百度知道 编辑:UC知道 时间:2024/05/29 13:08:11
输入255以内的十进制整数,或最多8位的二进制整数,
转换成对应的二进制或十进制数字
输入部分必须用gets来做,当遇到特殊数字如10,11的时候询问用户这个是十进制还是二进制
例子:
Type in a number: 8
Converting decimal to binary. Answer is: 00001000

Type in a number: 010
Converting binary to decimal. Answer is: 2

Type in a number: 10
Is this number decimal (d) or binary (b)? d
Converting decimal to binary. Answer is: 00001010

Type in a number: 8m
That is an invalid number!

Type in a number: 012
That is an invalid number!

Type in a number: 256
That is an invalid number!

分数不多,高手们帮帮忙啊
谢谢3楼做那个,补充一下
不用考虑负数的情况,输出的二进制统一为8位
而且输入里包含0123456789以外所有字符都判断为无效范围

这回OK了吧? 下次问问题把题目意思说清楚!

#include <stdio.h>
#include <stdlib.h> /*itoa()和atoi()在这个文件里*/
#include <string.h>
#include <math.h> /*pow()在这个文件里*/

int main( void )
{
char buf[9]; /*输入的整数不超过8位*/
int num=0,sign=10;
unsigned int i=0;
printf("请输入数字: ");
gets(buf);
for (i=0; i<strlen(buf); i++)
{
if ( !(buf[i]>='0' && buf[i]<='9') )
{
printf("含0123456789外的字符,请重先输入: ");
gets(buf);
i=0;
}
}

/*--------------------------------------*/
for(i=0; i<strlen(buf); i++)
{
if ( 49<buf[i]) /*输入的是10进制数*/
{
num = atoi(buf);
itoa(num,buf,2);
printf("十进制数%d的二进制形式是: ",num);
for (i=0; i<8-strlen(buf); i++)
{
printf("%d",0); //高位补零,补足8位
}
printf("%s\n"