コード
#include <stdio.h>
int card_conv(unsigned x, int n, char d)
{
char dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int digits = 0;
int sum;
if(x == 0){
d[digits++] = dchar[0];
}else{
while(x){
printf(" %d | %6d ・・・ %d\n", n, x, x % n);
printf(" +----------------\n");
d[digits++] = dchar[x % n];
x /= n;
if(x == 0){
printf(" %6d\n", x);
}
}
}
//入れ替え
for(int i = 0; i < digits / 2; i++){
int swap = d[i];
d[i] = d[digits - i - 1];
d[digits - i - 1] = swap;
}
return digits;
}
int main(void)
{
int i;
unsigned no;
int cd;
int dno;
char cno[512];
int retry;
puts("10進数を基数変換します。");
do{
printf("変換する非負の整数:");
scanf("%u", &no);
do{
scanf("%d", &cd);
}while(cd < 2 || cd > 36);
dno = card_conv(no, cd, cno);
printf("%d進数では、", cd);
for(i = 0; i <= dno - 1; i++){
printf("%c", cno[i]);
}
printf("です。\n");
printf("もう一度しますか(1・・・はい/0・・・いいえ):");
scanf("%d", &retry);
}while(retry == 1);
return 0;
}
所感
数年前にjavaのアルゴリズムの教科書で挫折した問題がようやく解けた。
自分も少しずつだが成長して来ているのだろう。
頑張ってよかった。明日もこの調子で頑張るぞー!
明日はTOEICか。こっちも頑張らないと。
ではでは