掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23823

10進数を16進に
投稿者---ゆーき(2005/10/25 15:48:55)


この間は宣言を無視した投稿をしてしまってすみません・・・
問題は『コマンドライン引数として2000以下の自然数kを受け取り,kを16進数表記で表示するプログラムを書け. ただし,printf()関数を使用してはならない. fprintf()関数も使用してはならない. ちなみに,10進数の「10,11,12,13,14,15,16,17」は16進数ではそれぞれ「A,B,C,D,E,F,10,11」となる.』で、一応作ってはみたのですが、数字がうまく出力されないし、printfでやっても数字が逆に出力されてしまいます・・・どこがおかしいのでしょうか??
教えてください。
int main (int argc,char *argv[])
{
int r,x,a;
x=atoi(argv[1]);
while(x > 0)/*x/16が0でない*/
{
r = x % 16;/*16で割った余りをrに保存*/
if (r >= 0 && r <=9)
{
putchar(r);/*ここが分からん*/
}

else if (r > 9)
{
putchar('A' + r -10);
}
x=x/16;
}
return (0);
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:10進数を16進に 23824 RiSK 2005/10/25 16:05:50
<子記事> Re:10進数を16進に 23825 REE 2005/10/25 16:11:01


No.23824

Re:10進数を16進に
投稿者---RiSK(2005/10/25 16:05:50)


> 数字がうまく出力されないし、

値0(0x0)から15(0xf)のいずれかを受け取り,
それに対応する'0'から'F'を返す関数は書けますか?

> 数字が逆に出力されてしまいます

考え方が違います。逆に出力する必要があるんです。
# プログラムが悪いのではありません。
# プログラムは書かれたとおりに動いています。

再帰を使うか,スタックを実装するか,
余りの列を配列を入れ,逆に出力するなどしてください。

>教えてください。

すでにNo.23753で(不完全ながら)解答を書いています。


この投稿にコメントする

削除パスワード

No.23825

Re:10進数を16進に
投稿者---REE(2005/10/25 16:11:01)


>この間は宣言を無視した投稿をしてしまってすみません・・・

【掲示板利用宣言】
ソースの添付は「HTML変換ツール」で字下げします。

>数字がうまく出力されないし、

>putchar(r);/*ここが分からん*/
>putchar('A' + r -10);

英字の場合にはなぜ'A'を足しているのですか?
その理由がわかれば、数字もうまくいくでしょう。

>printfでやっても数字が逆に出力されてしまいます
16進数を下位から求めていますので、
求めた順番のまま表示すれば、当然逆順になります。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧