- ベストアンサー
10進数を2進数に変換したいのですが・・・
こんばんは。 入力された10進数を2進数に変換するというプログラムを、一応作成することができたのですが、表示される結果が逆に表示されてしまいます。(例えば、4なら001) どのようにすれば、正しく表示することができるのでしょうか??ちなみにプログラムは #include<stdio.h> int main(void) { int num; printf("数字を入れてください。\n"); scanf("%d", &num); for(num = num ; num>1 ; num = num/2) printf("%d",num%2); printf("%d\n",num); return 0; } です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まぁ私の場合はですけど、num(2で割った余りの数値)を一個ずつ配列に格納しておいて、あとからそれを逆順に表示するようにすると思います。 一応プログラムを書くと(Nは2進数に直したときの桁数)、 #include<stdio.h> #define N 50 int main(void){ int num,num2[N],flg; printf("数字を入れてください。 : "); scanf("%d", &num); for(i=0; i<N; i++){ flg=i; num2[i]=num%2; num=num/2; if(num<1) break; } for(i=flg; i>=0; i--) printf("%d",num2[i]); printf("\n"); return 0; } 眠気たっぷりの上に即興で書いたので、プログラムは正直自信ありません^^;
その他の回答 (3)
- mac_res
- ベストアンサー率36% (568/1571)
#include<stdio.h> #define MASK 0x80000000 #define N 32 int main(void) { int num, i; char buf[BUFSIZ]; while (1) { printf("数字を入れてください。\n"); if (fgets(buf, BUFSIZ, stdin) == 0) { return (0); } if (sscanf(buf, "%d", &num) != 1) { continue; } for (i = 0; i < N; i++) { if ((num & MASK) != 0) { break; } num <<= 1; } for (; i < N; i++) { printf("%d", (num & MASK) ? 1 : 0); num <<= 1; } printf("\n"); } return 0; }
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
以前にも似たような質問がありました。
このプログラムを元にするなら for文の処理を「出力」ではなく「配列に格納」にして反対から出力とか・・・ それとかスタック(後入れ先出し法)を使うとか・・・ やと思います。 Cにスタックがあるかは判らないので調べてください。