A 回答 (14件中11~14件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
以下のプログラムでどうでしょうか。
#include <stdio.h>
int main(void) {
int i, n, c = 4;
scanf("%d", &n);
for (i = 16; n >= i; i *= 16)
c += 4;
for (i = c - 1; i >= 0; i--)
printf("%lu%s", (1 << i) & n ? 1 : 0, ((i % 4) == 0 ? " " : ""));
return 0;
}
No.3
- 回答日時:
「for を使う」というのが地味に面倒だなぁ. それがなければ再帰でさくっと終わるのに.
さておき, 入力のエラー処理を無視するとこんな感じかな:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void printBinary(int x, int suppressZero)
{
int base;
for (base = (INT_MAX/2)+1; base > 0; base /= 2) {
if (x >= base) {
putchar('1);
x -= base;
suppressZero = 0;
} else if (! suppressZero) {
putchar('0');
}
}
if (suppressZero) {
putchar('0');
}
}
int main(void)
{
int x;
printf("Input nonnegative value: ");
scanf("%d", &x);
printf("The binary representation of %d is: ", x);
printBinary(x, 1);
putchar('\n');
return EXIT_SUCCESS;
}
なお, この「教えて!goo」では仕様上「半角空白でインデントできない」ことになっている (という答が返ってきている) ので, インデントについてはあきらめてください. あとあえてコメントは書かず.
No.2
- 回答日時:
正の数 (と 0) だけであるなら表し方にさほどの紛れはないんですが (しいて言えば先頭に 0 をつけるかつけないか, くらいは考える必要がある), 負の数を許す場合にはそれをどのように表すのかも決めておく必要があります. 例えば -19 はどのように表せばいいのでしょうか?
あと, 「解答が開示されず悩んでいます」ということだけど, この「解答」というのは「あなたの解答」という意味じゃなくって「(出題者が想定した) 正答」という意味だよね? でそうだとすると, ここでプログラムを書いたとしてもその「(出題者が想定した) 正答」と違うものになってしまう可能性は高いんだけど, それはしょうがないってことでいいのかな?
ご指摘、ご確認ありがとうございます。
2進数上の負の値の扱いのことを知らずいってしまいました。
授業では特に習わず、定義されませんでしたが、以降正の整数と0という扱いにいたします。
私の答えたものではなく問題の正答という認識です。出題者の想定した正答と異なっていて構いません。
No.1
- 回答日時:
本気で考えるといろいろ突っ込みどころがある. 例えば, 「10進数を2進数に変換する」といっても
・「10進数」をプログラムにどうやって与えるのか
・「2進数」はプログラムからどう取り出すのか
を決めないとプログラムにしようがない. さらにいうと
・「整数の範囲」というが符号はどう扱うのか
というのも不明瞭だし,
・「ビット変換などは範囲外です」
とかっこ書きしてあるけど「ビット変換」ってなんだよとか, 不明確なところもある.
不学なために不足、誤りがあり申し訳ありません。ご指摘ありがとうございました。いくつか補足を行いました。
また、正負は正負のまま基数変換、printfで表示を行います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Ruby VBA 2 2023/01/14 14:14
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
プログラミングで二番目に大き...
-
getcの改行判定
-
C言語プログラムが理解できなくて…
-
C言語 数字以外を入力させない...
-
配列を関数に渡す方法
-
配列を使って魔方陣
-
初心者です。for文、if文を使っ...
-
c言語for文
-
c言語で平均をだす
-
while文について、c言語...
-
scanf関数を用いての加減乗除%...
-
行列をべき乗させるプログラム
-
c言語プログラミングで1から100...
-
C言語階乗の総和を求める
-
scanfが実行されません
-
階乗のプログラム!!
-
C言語の二分法のプログラムにつ...
おすすめ情報
整数値をscanfで取り込みそれを10進数と見なし2進数に変換してprintfで表示させたいです。値はint型ですべて扱います。
質問文「ビット~~」の一文は無視してください。授業中の発言をうろ覚えで書いたため誤りがあります。
int b[100];
のような鍵かっこを用いてはならないという意味のようですが、コレにも誤りがございましたら、無視してください。
不足、誤りがあり申し訳ありません。よろしくおねがいします。
修正です。
すべての整数ではなく正の整数と0でお願いします。
何度も補足すみません
stdio.hのみinclude可能です。
配列は用いては行けません。
intのみ(%dのみ)です。
各方への返事は後程行います。よろしくおねがいします。