C编程 实现输入一个正整数,输出其对应的二进制数。
问题大着呢,你只返回了一个数而已,应该返回一个数组 #include void main() { void fun(int m,int *j,int c[]); int m; int i; int c[100]={0};//用来装二进制数 int count = 0;//用来统计有效位数 printf("输入一个十进制整数:
"); scanf("%d",&m); fun(m,&count,c); for(i = 0; i 0;i++) { n=m%2; m=m/2; a[i]=n; *j=*j+1; } for(i=*j-1;i>=0;i--) { c[k++]=a[i]; } }
#include
#include
int count1InNum(int num)
{
int result=0;
while(num!=0)
{
num &=(num-1);
result++;
}
return result;
}
//此方法如果num为负数,比如-7,则求的1的个数实际是7的二进制形式中1的个数
int count(int num)
{
int result=0;
while(num!=0)
{ if(num%2!=0) result++; num /= 2; }
return result;
}
int main()
{
int num;
scanf("%d",&num);
while(num!=0)
{ char s[33]; itoa(num, s, 2);
printf("The number of 1 in %d (%s) is %d.
",num,s,count1InNum(num));
printf("The number of 1 in %d (%s) is %d.
",num,s,count(num));
scanf("%d",&num); }
getchar();
return 0;
}
#include "stdio.h"
int output(int num);
void main()
{
int num;
printf("输入正整数:"); //当超过一定位数时,会溢出
scanf("%d",&num);
if(num<=0)
{
printf("输入整数!");
}
else
{
output(num);
}
}
int output(int num)
{
int temp;
if(num!=0)
{
temp=num%2;
num=num/2;
output(num);
printf("%d",temp);
}
}
1。//实用点
#include <stdio.h>
typedef unsigned char byte;
void ShowBit(byte x, int n)
{
if (--n) ShowBit(x>>1, n);
printf("%d", x%2);
}
int main()
{
byte x = 0x6A;
ShowBit(x, 8);
return 0;
}
2。//容易点
#include <stdio.h>
int main(void) {
struct bits {
unsigned char b8 :1,
b7 :1,
b6 :1,
b5 :1,
b4 :1,
b3 :1,
b2 :1,
b1 :1;
};
union uchar {
struct bits chbits;
unsigned char ch;
} mychar;
printf("Enter a character: ");
scanf("%c", &mychar.ch);
printf("Binary representation of the character %c : %d%d%d%d%d%d%d%d\n", mychar.ch,
mychar.chbits.b1, mychar.chbits.b2, mychar.chbits.b3,
mychar.chbits.b4, mychar.chbits.b5, mychar.chbits.b6,
mychar.chbits.b7, mychar.chbits.b8);
return 0;
}
3.微软标准答案
////////////////////////////////
static void __cdecl xtoa (
unsigned long val,
char *buf,
unsigned radix,
int is_neg
)
{
char *p; /* pointer to traverse string */
char *firstdig; /* pointer to first digit */
char temp; /* temp char */
unsigned digval; /* value of digit */
p = buf;
if (is_neg) {
/* negative, so output '-' and negate */
*p++ = '-';
val = (unsigned long)(-(long)val);
}
firstdig = p; /* save pointer to first digit */
do {
digval = (unsigned) (val % radix);
val /= radix; /* get next digit */
/* convert to ascii and store */
if (digval > 9)
*p++ = (char) (digval - 10 + 'a'); /* a letter */
else
*p++ = (char) (digval + '0'); /* a digit */
} while (val > 0);
/* We now have the digit of the number in the buffer, but in reverse
order. Thus we reverse them now. */
*p-- = '\0'; /* terminate string; p points to last digit */
do {
temp = *p;
*p = *firstdig;
*firstdig = temp; /* swap *p and *firstdig */
--p;
++firstdig; /* advance to next two digits */
} while (firstdig < p); /* repeat until halfway */
}
/* Actual functions just call conversion helper with neg flag set correctly,
and return pointer to buffer. */
char * __cdecl _itoa (
int val,
char *buf,
int radix
)
{
if (radix == 10 && val < 0)
xtoa((unsigned long)val, buf, radix, 1);
else
xtoa((unsigned long)(unsigned int)val, buf, radix, 0);
return buf;
}
char * __cdecl _ltoa (
long val,
char *buf,
int radix
)
{
xtoa((unsigned long)val, buf, radix, (radix == 10 && val < 0));
return buf;
}
char * __cdecl _ultoa (
unsigned long val,
char *buf,
int radix
)
{
xtoa(val, buf, radix, 0);
return buf;
}
#ifndef _NO_INT64
static void __stdcall x64toa ( /* stdcall is faster and smaller... Might as well use it for the helper. */
unsigned __int64 val,
char *buf,
unsigned radix,
int is_neg
)
{
char *p; /* pointer to traverse string */
char *firstdig; /* pointer to first digit */
char temp; /* temp char */
unsigned digval; /* value of digit */
p = buf;
if ( is_neg )
{
*p++ = '-'; /* negative, so output '-' and negate */
val = (unsigned __int64)(-(__int64)val);
}
firstdig = p; /* save pointer to first digit */
do {
digval = (unsigned) (val % radix);
val /= radix; /* get next digit */
/* convert to ascii and store */
if (digval > 9)
*p++ = (char) (digval - 10 + 'a'); /* a letter */
else
*p++ = (char) (digval + '0'); /* a digit */
} while (val > 0);
/* We now have the digit of the number in the buffer, but in reverse
order. Thus we reverse them now. */
*p-- = '\0'; /* terminate string; p points to last digit */
do {
temp = *p;
*p = *firstdig;
*firstdig = temp; /* swap *p and *firstdig */
--p;
++firstdig; /* advance to next two digits */
} while (firstdig < p); /* repeat until halfway */
}
/* Actual functions just call conversion helper with neg flag set correctly,
and return pointer to buffer. */
char * __cdecl _i64toa (
__int64 val,
char *buf,
int radix
)
{
x64toa((unsigned __int64)val, buf, radix, (radix == 10 && val < 0));
return buf;
}
char * __cdecl _ui64toa (
unsigned __int64 val,
char *buf,
int radix
)
{
x64toa(val, buf, radix, 0);
return buf;
}
#endif /* _NO_INT64 */
/////////////////////////////
例:
#include <stdio.h>
void main( void )
{
char buffer[20];
int i = 3445;
long l = -344115L;
unsigned long ul = 1234567890UL;
_itoa( i, buffer, 10 );
printf( "String of integer %d (radix 10): %s\n", i, buffer );
_itoa( i, buffer, 16 );
printf( "String of integer %d (radix 16): 0x%s\n", i, buffer );
_itoa( i, buffer, 2 );
printf( "String of integer %d (radix 2): %s\n", i, buffer );
_ltoa( l, buffer, 16 );
printf( "String of long int %ld (radix 16): 0x%s\n", l,
buffer );
_ultoa( ul, buffer, 16 );
printf( "String of unsigned long %lu (radix 16): 0x%s\n", ul,
buffer );
}
LZ给分
用递归
#include
"stdio.h"
int
output(int
num);
void
main()
{
int
num;
printf("输入正整数:");
//当超过一定位数时,会溢出
scanf("%d",&num);
if(num<=0)
{
printf("输入整数!");
}
else
{
output(num);
}
}
int
output(int
num)
{
int
temp;
if(num!=0)
{
temp=num%2;
num=num/2;
output(num);
printf("%d",temp);
}
}
用 itoa()函数也可以实现这个功能
#include <stdlib.h>
int main(){
int shu = 12;
char str[32];
itoa(shu, str, 2);
printf("integer = %d erjinzhi = %s\n", shu, str);
getch();
}
星丁双鹭: 用递归#include "stdio.h"int output(int num);void main() {int num; printf("输入正整数:"); //当超过一定位数时,会溢出scanf("%d",&num); if(num<=0){printf("输入整数!");} else{output(num);} }int output(int num) {int temp;if(num!=0){temp=num%2;num=num/2; output(num); printf("%d",temp);}}
头屯河区19175977818: 输入一个正整数输出其反序数,c语言 - ?
星丁双鹭: #include<stdio.h> #include<stdlib.h> #include<string.h> void main(){ int ipnumber,i; char string[100]; printf("请输入要进行反序的正整数:"); scanf("%d",&ipnumber); itoa(ipnumber,string,10); i=strlen(string); printf("\n反序后的正整数为:...
头屯河区19175977818: C语言编程:输入一个正整数,输出如下图形,例如输入5,输出的图形如下: - ?
星丁双鹭: #include int main() { int i,j,k,n; printf("请输入一个数字:"); scanf("%d",&n); for(i=1,k=-1;i { for(j=0;j printf("%d",i); if(k>0) { for(j=0;j printf("%d",i); } printf("\n"); } for(i=n-1,k=2*(n-2)-1;i>0;i--,k-=2) { for(j=0;j printf("%d",i); if(k>0) { for(j=0;j printf("%d",i); } printf("\n"); } return 0; }
头屯河区19175977818: c语言,用循环,输入一个整数,正序输出其各个位例如输入1234输出1 2 3 4?
星丁双鹭: #include<stdio.h>#include<math.h>int main() { int a; scanf("%d", &a); while(a>0) { printf("%d\n", a%10); a = a/10; } return 0;}
头屯河区19175977818: 输入一个正整数,输出其各位数字之积的C编程怎么写? - ?
星丁双鹭: #include int main(){ int a,sum=0; scanf("%d",&a); for(;a;a/=10) sum+=a%10; printf("%d",sum); }
头屯河区19175977818: C语言编写程序,从键盘输入一个二进制正整数,输出其对应的十进制数 - ?
星丁双鹭: 问题大着呢,你只返回了一个数而已,应该返回一个数组 #includevoid main() { void fun(int m,int *j,int c[]); int m; int i; int c[100]={0};//用来装二进制数 int count = 0;//用来统计有效位数 printf("输入一个十进制整数:\n"); scanf("%d",&m); ...
头屯河区19175977818: C编程 输入一个不超过10的9次方的正整数,输出他的位数.例如12735的位数是5.不要是用任何数学函数,只能用四则运算和循环语句实现 - ?
星丁双鹭:[答案] #include
头屯河区19175977818: 如何用c语言编程输入一个两位正整数,让其以字符形式输出 - ?
星丁双鹭: #include int main() { int k; scanf("&d",k); if(k>99 || k<10) { printf("输入不符合要求"); return 0; } int d = k /10; //十位数 int i = k - d*10; // 个位数 printf("十位字符:%c\n",d); printf("个位字符:%c\n",i); getchar(); return 0; }
头屯河区19175977818: 用C语言编程:输入一个正整数,输出如下式子之和:1+1/2+1/3+1/4+……+1/n - ?
星丁双鹭: int i,n; double sum=0; scanf("%d",&n); for(i=1;i<=n;i++) { sum+=1./n; } printf("%lf\n",sum);
头屯河区19175977818: 用c语言编写程序 输入一个正整数n?
星丁双鹭: /*用c语言编写程序 输入一个正整数n,求1到n的数中1出现的个数*/#include"stdio.h"int count(int n){ int i,j,c=0; for(i=1;i