• 締切済み

お願いします、教えてください。10進数を2進数に変換するには・・・。

10進数を2進数に変換するプログラムを作成したのですが、うまく動作しません、どうしても解らないので教えてください。 サンプルコードを元に「define」は5で稼動出来る様にしたいのですが、動作せず困っています。以下の、どの部分を修正すれば変換出来るのでしょうか? ご教授よろしくお願いいたします。 //10進数文字を数字の2進数で表示 #include "stdafx.h" #define HEX 5 //「function」:入力文字された文字の処理///////////////////////////////////// char ToInt( char cInt) { int mal=0; switch (cInt){ case '0': mal=0; break; case '1': mal=1; break; case '2': mal=2; break; case '3': mal=3; break; case '4': mal=4; break; case '5': mal=5; break; case '6': mal=6; break; case '7': mal=7; break; case '8': mal=8; break; case '9': mal=9; break; } return (mal); } //「function」:入力文字された文字数//////////////////////////////////////////// char HexInt( char eInt) { char mul=0; switch (eInt){ case 0: mul='0'; break; case 1: mul='1'; break; } return (mul); } //「function」:桁数の計算(10×指数を計算)/////////////////////////////////// int HexAcc( int n ) { int i; int ans=1; for( i=0; i<n; i++ ){ ans *= 10; } return (ans); } int _tmain(int argc, _TCHAR* argv[]) { int i=0,n=0,j=0,s=0,k=0,m=0,e=0,ans=0, add=0; char decimal[255], ditto[255],sub[255],temp[255],chg[255],siu[255]; //入力されない場合// if( 1 > argc ){ } else{ printf("10進数を入力してください。\n"); return 1; } for( k=0; k<255; k++ ){ //文字として'0'を代入// sub[k] = '0'; //subに文字として'0'を代入// temp[k] = '0'; //tempに文字として'0'を代入// chg[k] = '0'; //chgに文字として'0'を代入// siu[k] = '0'; //siuに文字として'0'を代入// } //入力された文字数を受取る// for( i=0; argv[1][i] != '\0'; i++ ){ decimal[i] = argv[1][i]; } decimal[i] = '\0'; //空白文字のチェック// for( i=0; decimal[i] != '\0'; i++ ){ if( decimal[i] != ' ' ){ ditto[n] = decimal[i]; n++; } } //'\0'を代入(文字列の終端)// ditto[n]='\0'; //「0」から「9」のループ// for( n=0; ditto[n] != '\0'; n++ ){ if(( ditto[n] == '0' ) || ( ditto[n] == '1' ) || ( ditto[n] == '2' ) || ( ditto[n] == '3' ) || ( ditto[n] == '4' ) || ( ditto[n] == '5' ) || ( ditto[n] == '6' ) || ( ditto[n] == '7' ) || ( ditto[n] == '8' ) || ( ditto[n] == '9' )){ }else{ printf("エラー\n 10進数を入力してください。\n"); return 0; } } //桁数のループ// for( n=0; ditto[n] != '\0'; n++ ){ m = m + 1 ; } //桁数の判断// if( m <= HEX ){ }else{ printf("エラー\n入力文字数は、%d文字以内にしてください。\n",HEX); return 0; } //subにdittoを代入// for( n=0; ditto[n] != '\0'; n++){ sub[HEX-m+n] = ditto[n]; } sub[HEX] = '\0'; //'\0'を代入(文字列の終端)// //sub[0]からsub[9]の計算// for( n=0; sub[n] != '\0'; n++){ ans = ToInt(sub[n]); add += ans * HexAcc(HEX-n-1); } //2進数の計算・商が0になるまで// for( n=0; sub[n] != '\0'; n++ ){ temp[n] = add % 2; add = add / 2; if( add == 0){ break; } } temp[HEX] = '\0'; //'\0'を代入(文字列の終端)// //桁数のチェック(商・余り)// for( ; n>=0; n-- ){ e = e++; } //temp・値の入替え「tempからchg」// for( n=0; sub[n] != '\0'; n++ ){ chg[HEX-n-2] = temp[n]; } chg[HEX]='\0'; //'\0'を代入(文字列の終端)// //2進数に変換// for( ; n>=0; n-- ){ siu[n] = HexInt(chg[n]); } siu[HEX]='\0'; //'\0'を代入(文字列の終端)// printf("\n10進数文字を2進数で変換した値は・・・ %s \n",siu); }

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「うまく動作しない」というのは, どのように「うまく動作しない」のでしょうか? 与えたデータと期待する出力及び実際に得られた出力を書いてください.

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

十進数を二進数に変換するなら、以下のコードでできます。 #include <stdio.h> void decToBin(int n) {   if (n > 1)     decToBin(n / 2);   printf("%d", n % 2); } int main(void) {   int i;      for (i = 0; i <= 100; i++)     decToBin(i), putchar('\n');   return 0; } (注)インデントのため、全角空白を使っています。

関連するQ&A