

c言語を習い始めて1ヶ月ほどの者です。  
タイトルにある通りです。  
最後のfor文が間違っているみたいなのですがいまいちピンときません。  
コードが汚い上にもっと楽な方法があるのは知っています。  
しかし、それを使わずにやれとのことなので困っています。  
上のfor文を変えずに下のfor文の良いアルゴリズムを教えてほしいです。

[code]

    #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;
    }
    
[/code]


CC BY-SA 4.0
2019-10-21T05:37:22.713
59836
2019-10-21T07:59:05.443
2019-10-21T05:52:50.273
29826
35091
question
c
16進数を10進数に変えて出力するプログラム


やりたいことは多分こういうことだと思います。

[code]

    Input hexademical number :12
    
[/code]

と入力されると

[code]

    a[0]=1 a[1]=2
    
[/code]

と格納されて

[code]

    k = a[0] * 16^1 + a[1] * 16^0
    
[/code]

を計算する。

文字を数値化して配列に格納するところまではいいのですが、合計を求めるループがちょっと違います。  
上の式を3桁にすると違いがはっきりしてくると思います。

[code]

    Input hexademical number :123
    a[0]=1 a[1]=2 a[2]=3
    k = a[0] * 16^2 + a[1] * 16^1 + a[2] * 16^0
    
[/code]

できるだけ最初のコードを使って書き直すと

[code]

    int k=0, x, y, z;
    for(x=0; x<i+1; x++){
        z=1;
        for(y=i-x;y > 0;y--){
             z*=16;
        }
        k+=a[x]*z;
        printf("%d\n%d\n", k, z);
    }
    printf("Decimal number is %d\n", k);
    
[/code]

これでいけると思います。


CC BY-SA 4.0
2019-10-21T07:59:05.443
59845
2019-10-21T07:59:05.443
9515
59836
answer