这是我的做法,我是初学者,可是什么也没有输出,我也看不出有什么问题,请各位指教
#include<stdio.h>
main()
{
int x[16]={0},n,i,m;
printf("请输入一个整数:");
scanf("%d",&n); //判断n是否是整数
if(n>0)
{
for(i=0;n<16;i++) //转化为二进制
{
x[i]=n%2;
n=n/2;
}
for(i=15;i>=0;i--) //逆序输出
printf("%d",x[i]);
}
if(n<0) //
{
m=-(n-1);
for(i=0;n>=1;i++)
{
x[i]=n%2;
n=n/2;
}
for(i=0;i<16;i++) //按位取反
{
if(x[i]=0) x[i]=1;
if(x[i]=1) x[i]=0;
}
for(i=15;i>=0;i++)
printf("%d",x[i]);
}
if(n=0)
{
for(i=0;i<16;i++)
printf("%d",x[i]);
}
printf("\n");
}
第1个回答 2012-12-24
/*
输入整数(0结束) : 10
10 = (1010)2
输入整数(0结束) : 127
127 = (1111111)2
输入整数(0结束) : 255
255 = (11111111)2
输入整数(0结束) :
*/
#include <stdio.h>
#include <stdlib.h>
char *Converse(char s[],int n) {
int i,ch,m = 0;
while(n) {
s[m] = n%2 + '0';
n /= 2;
++m;
}
s[m] = '\0';
for(i = 0; i < m/2; ++i) {
ch = s[i];
s[i] = s[m - 1 - i];
s[m - 1 - i] = ch;
}
return s;
}
int main() {
int num;
char s[20];
while(1) {
printf("输入整数(0结束) : ");
scanf("%d",&num);
if(num == 0) break;
if(num < 0) num = -num;
printf("%d = (%s)2\n",num,Converse(s,num));
}
system("PAUSE");
return 0 ;
}
输入整数(0结束) : 10
10 = (1010)2
输入整数(0结束) : 127
127 = (1111111)2
输入整数(0结束) : 255
255 = (11111111)2
输入整数(0结束) :
*/
#include <stdio.h>
#include <stdlib.h>
char *Converse(char s[],int n) {
int i,ch,m = 0;
while(n) {
s[m] = n%2 + '0';
n /= 2;
++m;
}
s[m] = '\0';
for(i = 0; i < m/2; ++i) {
ch = s[i];
s[i] = s[m - 1 - i];
s[m - 1 - i] = ch;
}
return s;
}
int main() {
int num;
char s[20];
while(1) {
printf("输入整数(0结束) : ");
scanf("%d",&num);
if(num == 0) break;
if(num < 0) num = -num;
printf("%d = (%s)2\n",num,Converse(s,num));
}
system("PAUSE");
return 0 ;
}
第2个回答 2012-12-24
for(i=0; n<16; i++) //转化为二进制
还有这
for(i=0; n>=1; i++)
中间的n 都应该改成 i 吧?
还有这
for(i=0; n>=1; i++)
中间的n 都应该改成 i 吧?
第3个回答 2012-12-24
for(i=0;n<16;i++) //转化为二进制
为什么是n<16??本回答被提问者采纳
为什么是n<16??本回答被提问者采纳