質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

2回答

326閲覧

10進数の整数をn進数に変換する方法について

Komasaan_2525

総合スコア1

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2022/06/05 00:52

現在、任意の正の整数を2から36進数のいずれかに変換するというコードを書いています。しかし、要素数が何故か10倍になってしまっていたり要素の入れ替えがうまくいきません。また、最後のn進数への変換コードもうまく書けていません。具体的にどこのコードを直したら良いか教えていただけると幸いです。

#include<stdio.h> #define SIZE 36 #define SIZE_2 32 int main(void) { int letter[SIZE] = {0}; int remainder[SIZE_2] = {0}; int product = 0; int tmp; int out; int x = 0; int tmp_n; int i = 0; int count = 0; int n,k = 0; //数値と何進数かを入力 printf("Input integer :"); scanf("%d",&n); tmp_n = n; printf("Input integer between 2 and 36 :"); scanf("%d",&k); //nかkが条件に合わなければプログラムを終了 if(n < 0 || n > 2147483647 || k < 2 || k > 36) { printf("Error.\n"); return 0; } //0から9,AからZまでの要素が入った配列を用意 for(i = 0; i <= SIZE; i++) { if(i <= 9) { letter[i] = i; } else if(i >= 10) { letter[i] = 'A' + i - 10; } } //余りを出して進数変換の準備 while(1) { product = n / k; remainder[count] = n % k; n = product; count++; if(n == 0) break; } //配列の要素数確認 printf("%d",count); //確認用 for(i = 0; i <= count; i++) { printf("%d\n",remainder[i]); } printf("----\n"); //入れ替え処理 for(i = 0; i < count/2; i++) { tmp = remainder[i]; remainder[i] = remainder[count - 1 - i]; remainder[count - 1 - i] = tmp; } //確認用 for(i = 0; i <= count; i++) { printf("%d\n",remainder[i]); } //余りを対応する文字(数字)に変換 for(i = 0; i < count; i++) { x = remainder[i]; out += letter[x]; } //結果を表示 printf("%dを%d進数に変換すると%dです。\n",tmp_n,k,out); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自分が「この変数はこういう意味なので、こういう値をセットする」と決めたことを、プログラムを書いている途中で忘れちゃった感じですかね?忘れないように、ちゃんと書きだしておいたらどうでしょうか?

どこのコードを直したら良いか

直すのは、

C

1 for(i = 0; i <= SIZE; i++) 2 3 letter[i] = i; 4 5 for(i = 0; i <= count; i++) 6 7 out += letter[x]; 8 9 printf("%dを%d進数に変換すると%dです。\n",tmp_n,k,out);

でしょうか。

投稿2022/06/05 03:14

otn

総合スコア84676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

n進数を出すなら、数値をnで割ってその余りを出していけばいいだけです

16進数なら、余りの 0~15 を、'0'~'F' にして並べていけばいいってことになります

投稿2022/06/05 00:55

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問