現在、任意の正の整数を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; }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。