入力した10進数を2進数で表示するプログラム

kerotan0820
記事: 91
登録日時: 14年前

入力した10進数を2進数で表示するプログラム

投稿記事 by kerotan0820 » 13年前

出来ましたよ、出来ました!

CODE:

#include

int waru_cnt( unsigned );

int main(void)
{
	unsigned int in=0;
	int cnt=0,i;

	printf("符号なし10進数:");  scanf("%d",&in);								

	cnt = waru_cnt(in);

	printf("2進数:");
	for(i=cnt; i>=0; i--) printf("%d",(in>>i)&1);
	puts("");
}

int waru_cnt ( unsigned in)
{
	int cnt=0;
	do{
		if(in != 0 && in != 1) cnt++;
		in /= 2;
	}while(in !=0 && in != 1);

	return cnt;
}
これで、出来るはずです…!
改善したほうが良い点等、ありましたらご指摘頂けると幸いです。

とりあえず動いて嬉しいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: 入力した10進数を2進数で表示するプログラム

投稿記事 by softya(ソフト屋) » 13年前

こうも書けますね。
ただし、sizeof(inp)*8のため特殊な環境に移植性のないプログラムです

CODE:

#include 


int main(void)
{
    unsigned int inp=0;
    int bit;
 
    printf("符号なし10進数:");  scanf("%u",&inp);                                
 
 
 	for(bit=sizeof(inp)*8-1 ; (0x01=0; bit--) printf("%d",(inp>>bit)&1);
    puts("");
}

アバター
tk-xleader
記事: 158
登録日時: 14年前

RE: 入力した10進数を2進数で表示するプログラム

投稿記事 by tk-xleader » 13年前

では、僕も一つ。

CODE:

#include

void print_base2(unsigned val){
	if(val != 0)print_base2(val >> 1);
	else return;
	putchar(val&1 ? '1' : '0');
}

int main(void){
	unsigned val;
	fputs("符号なし10進数:",stdout);
	scanf("%u",&val);
	
	print_base2(val);
	putchar('\n');
	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: 入力した10進数を2進数で表示するプログラム

投稿記事 by みけCAT » 13年前

>> softya(ソフト屋)さん、tkmakwins15さん
撃墜成功です。
0を入力すると、
softya(ソフト屋)さんのコードでは何も出力されずTLEしました。
http://ideone.com/HOHZH
tkmakwins15さんのコードでは何も出力されずWAです。
http://ideone.com/XnHyo
オフトピック
200点ゲット(笑)

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: 入力した10進数を2進数で表示するプログラム

投稿記事 by みけCAT » 13年前

というわけで自分で書いてみました。

CODE:

#include 
#include 
#include 

int main(void) {
	char* buffer;
	int bufferSize=0;
	unsigned int input;
	unsigned int temp;
	buffer=malloc(sizeof(unsigned int)*CHAR_BIT+10);
	if(buffer==NULL) {
		fprintf(stderr,"メモリ確保失敗\n");
		return 1;
	}
	fprintf(stderr,"符号なし10進数:");
	scanf("%u",&input);
	for(temp=input;bufferSize==0 || temp>0;temp>>=1) {
		buffer[bufferSize++]=temp&1;
	}
	printf("2進数:");
	for(bufferSize--;bufferSize>=0;bufferSize--) {
		putchar(buffer[bufferSize]+'0');
	}
	putchar('\n');
	free(buffer);
	return 0;
}
最後に編集したユーザー みけCAT on 2012年8月22日(水) 08:04 [ 編集 1 回目 ]
理由: バグ修正

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: 入力した10進数を2進数で表示するプログラム

投稿記事 by softya(ソフト屋) » 13年前

しまった。ガード入れ忘れた。
リベンジ版です。

CODE:

#include 

int main(void)
{
    unsigned int inp=0;
    int bit;
 
    printf("符号なし10進数:");  scanf("%u",&inp);                                
 
 
 	for(bit=sizeof(inp)*8-1 ; (0x010 ; bit-- ) ;
    printf("2進数:");
    for(; bit>=0; bit--) printf("%d",(inp>>bit)&1);
    puts("");
}

アバター
tk-xleader
記事: 158
登録日時: 14年前

RE: 入力した10進数を2進数で表示するプログラム

投稿記事 by tk-xleader » 13年前

なるほど、じゃ、一段かまそう。

CODE:

#include

void print_base2_impl(unsigned val){
	if(val != 0)print_base2_impl(val >> 1);
	else return;
	putchar(val&1 ? '1' : '0');
}

void print_base2(unsigned val){
	val == 0U ? (void)putchar('0') : print_base2_impl(val);
}

int main(void){
	unsigned val;
	fputs("符号なし10進数:",stdout);
	scanf("%u",&val);
	
	print_base2(val);
	putchar('\n');
	return 0;
}

kerotan0820
記事: 91
登録日時: 14年前

Re: 入力した10進数を2進数で表示するプログラム

投稿記事 by kerotan0820 » 13年前

なんか大変なことに…(笑)(笑) 勉強させていただきます。

アバター
little
記事: 44
登録日時: 13年前

RE: 入力した10進数を2進数で表示するプログラム

投稿記事 by little » 13年前

自分も書いてみましたー。

CODE:

#include 
#include 

int BitGet( unsigned int,  int, char* );

int main()
{
	unsigned int value;
	int count = 0;
	char bit[33] = {0};						

	printf( "符号なし10進数:" );
	scanf( "%u", &value );

	if ( value ) count = BitGet( value, count, bit );
	printf( "%uの2進数:", value );
	for ( ; count >= 0; count-- ) printf( "%d", bit[count] ); 
	
	printf( "\n" );
	_getch();
	return 0;
}


int BitGet( unsigned int value,  int count, char* bit )
{
	unsigned int hoge = value;
	bit[count] =  hoge &= 1;
	value = value >> 1;
	if ( value )  count = BitGet( value, count += 1, bit );
	return count;
}
明日にはもう読めないだろう・・・orz