-2

コードは 2 進数を 10 進数に変換する必要がありますが、そうではありません。誰でも私が間違っていた可能性がある場所を確認してください。

#include <stdio.h>
#include <math.h>
#include <string.h>

int main()
{

    char s[40];
    int base;
    int index,n,p,sum=0;     /* n is the number of digits in the converted value */

    printf("enter the number and base: ");
    scanf("%s %d",s,&base);

    for(n=strlen(s)-1;n>=0;n--)
    {
        p=strlen(s);
        for(index=strlen(s)-(p-1); index<=p; index++)
        {
        sum += s[index] * pow(base,n);
        }
    }
    printf("decimal no. is %d",sum);
    printf("\n");

}

出力::

enter the number and base:1011
2

10 進数 1487年です

4

3 に答える 3

2

コードにはいくつかの問題があります。

  • 必要なループは 2 つではなく 1 つだけです
  • 数字の値ではなく、数字を表す文字、つまり'0'またはを使用しています'1'
  • あなたの計算は少しずれています: inpow(base,n)n後ろから始まる数字の位置に置き換える必要があります.

コードを修正する方法は次のとおりです。

// Power starts at the length-1
p=strlen(s)-1;
for(index=0; index < strlen(s); index++, p-- /* <<< Power counts down */)
{
    sum += (s[index]-'0') * pow(base,p);
    //               ^^^-- Note the minus '0' above:
    //                     That's what gives you a digit's value
}

これはideoneのデモです。

于 2013-03-28T00:38:00.147 に答える
1
p = 1; sum = 0;
for(n=strlen(s)-1;n>=0;n--)
{
    sum += (s[n] - '0') * p;
    p = p << 1;
}

double for cycle の代わりに、上記のコードをお勧めします。

于 2013-03-28T00:34:34.637 に答える
0

私の答えは:

#include <stdio.h>
#include <math.h>
#include <string.h> 
int main(int argc, char *argv[]){
    char s[40];
    int base;
    int index,n,p,sum=0;/*n is the number of digits in the converted value */
    printf("enter the number and base: ");
    scanf("%s %d",s,&base);

    p = strlen(s);
    index = 0;
    for(n = 40 - p - 1; n >= 0; n--)
        sum += (s[n] - '0') * pow(base, index++);
    printf("decimal no. is %d",sum);
    printf("\n");
    return 0; 
}
于 2013-03-28T01:17:06.300 に答える