2014-09-26 1 views
1

Я попытался преобразовать число п на основе в десятичную с C. У меня есть этот код:Преобразование Основанный-н Количество в десятичный Но не работает

scanf("%d", &n); 
scanf("%d %d %d %d", &n1, &n2, &n3, &n4); 

dec = (n1*pow(n,3) + n2*pow(n,2) + n3*pow(n,1) + n4*pow(n,0)); 

Он работает отлично, пока я не ввести п = 10 & n1 n2 n3 n4 = 0 2 5 4.

результат должен быть 254, но терминал показал, 253. оказывается, что начиная с 200-999, то dec уменьшается на 1. Тем не менее, когда я ввода 1000, dec=1000. Как я могу это исправить?

+2

Почему этот вопрос отмечен как [tag: c], так и [tag: C#]? – Krumia

+0

взлеты, извините. моя вина. –

+0

Работает для меня. @Hikmah Az, в котором вы используете –

ответ

1

Скорее всего, вы объявили dec как int в то время как функция pow возвращает значение double. Здесь double преобразуется в int a, округляется.

изменение

double dec = (n1*pow(n,3) + n2*pow(n,2) + n3*pow(n,1) + n4*pow(n,0)); 
printf("%f",dec); 

и выход будет

254.000000 
+0

yap, вы правы. Спасибо большое. теперь он работает отлично. –

+0

@HikmahAz Добро пожаловать! – A4L

1

Хотя код, который вы предоставили отлично работает на некоторых реализациях, например, here, вы могли бы предпочтительно не использовать функцию pow, поскольку вы работают с целыми числами и без негатива в качестве мощности и определяют свою собственную функцию intpow. Наивная реализация этого будет:

int intpow(int n, unsigned int power) 
{ 
    int result = 1; 
    while (power) 
    { 
     result *= n; 
     power--; 
    } 
    return result; 
} 

Это просто может быть, что вся сумма, которая является суммой удваивается, оказывается меньше, чем число вы ожидаете увидеть, скажем, 0.000013, из которые цифры после десятичной точки отбрасываются при преобразовании, чтобы получить присвоенный этому int dec.

Вы можете проверить double результат путем изменения типа dec в double и печать с спецификатора формата "%f". Если это так, моя рекомендация будет правильным решением.

Вы также можете попробовать подумать о лучших способах преобразования базы, потому что есть тот, который не требует (int)pow.

+0

ах его правда. теперь работает. Спасибо. –

+0

@Hikmah Добро пожаловать – ThoAppelsin