Я попытался создать программу C для преобразования введенного пользователем десятичного числа в восьмеричное. Я написал код C со своей собственной логикой, не исследуя, как другие пользователи пытаются это сделать. Он отлично работает для числа 601
и некоторых других чисел, но для большинства чисел он возвращает восьмеричный эквивалент с последней цифрой, которая на 1
меньше, чем должна быть. Для 75
возвращается 112
вместо 113
. Я понимаю, что использование printf
с %o
выполняет свою работу, но это как бы сводит на нет цель обучения программированию. Вот мой код:
#include <stdio.h>
#include <math.h>
/* converting decimal to octal */
int main()
{
int n,x,y,p,s;
printf("Enter a decimal number ");
scanf("%d",&x);
s=0;p=0;
while (x!=0)
{
y=x%8;
s=s+y*pow(10,p);
x=(x-y)/8;
p=p+1;
}
printf("the octal equivalent is: %d\n",s);
getch();
return 0;
}
pow(10, p)
приводится к int? Как насчет того, чтобы инициализировать p значением 1 и умножать его на 10 за итерацию, а не увеличивать его? - person susmits   schedule 02.11.2012