16進数を10進数に変えて出力するプログラム
c言語を習い始めて1ヶ月ほどの者です。
タイトルにある通りです。
最後のfor文が間違っているみたいなのですがいまいちピンときません。
コードが汚い上にもっと楽な方法があるのは知っています。
しかし、それを使わずにやれとのことなので困っています。
上のfor文を変えずに下のfor文の良いアルゴリズムを教えてほしいです。
#include <stdio.h>
int main(){
char c;
int i, a[1000];
printf("Input hexademical number:");
for(i=0;;i++){
scanf("%c", &c);
if(c == '\n'){
i -= 1;
break;
}else if(c == '0'){
a[i]=0;
}else if(c == '1'){
a[i]=1;
}else if(c == '2'){
a[i]=2;
}else if(c == '3'){
a[i]=3;
}else if(c == '4'){
a[i]=4;
}else if(c == '5'){
a[i]=5;
}else if(c == '6'){
a[i]=6;
}else if(c == '7'){
a[i]=7;
}else if(c == '8'){
a[i]=8;
}else if(c == '9'){
a[i]=9;
}else if(c == 'a'){
a[i]=10;
}else if(c == 'b'){
a[i]=11;
}else if(c == 'c'){
a[i]=12;
}else if(c == 'd'){
a[i]=13;
}else if(c == 'e'){
a[i]=14;
}else if(c == 'f'){
a[i]=15;
}
}
int k=0, x, y, z=1;
for(x=0; x<i+1; x++){
for(y=0;y<i-x;y++){
z*=16;
}
k+=a[x]*z;
printf("%d\n%d\n", k, z);
}
printf("Decimal number is %d\n", k);
return 0;
}