#c #binary #octal
Вопрос:
//это правильно?
#includelt;stdio.hgt; #includelt;math.hgt; main() { int a[1000], n, i,sum=0,b=0,p=0,t=1,c,j=0; printf("Enter the number to convert:"); scanf("%d",amp;n); for(i=0; ngt;0; i ) { a[i]=n%2; n= n/2; } printf("Binary of the given number= "); for(i=i-1 ;igt;=0 ;i--) { printf("%d",a[i]); j ; } printf("n"); for(c=j-1;cgt;=0;c--) { t=pow(8,c)*a[p]; sum=sum t; p ; } printf("noctal %d",sum); } //this code is working perfectly till binary conversion but the last for loop is not working properly. Eventhough i think the logic is correct.
Комментарии:
1. ваша логика преобразования не так верна, как вы думаете. Для каждого бита , установленного в вашем массиве
a
, вы добавляете к результату степень 8. Но вам нужно использовать сразу 3 бита, а не только 1.2. Добро пожаловать в SO. Представление чисел-это в основном строки. В памяти нет десятичного, шестнадцатеричного или восьмеричного числа. Это просто ценности. Восьмеричное представление предназначено только для печати. Поэтому вам не следует использовать целочисленные переменные для хранения вашего текстового представления. Вместо этого используйте строки. Поскольку вы можете использовать только 8 значений на цифру вместо 10, вам может потребоваться больше цифр, чем доступно для
int
переменной.3. Сначала вы создаете массив двоичных цифр, а затем обрабатываете этот массив двоичных цифр, как если бы это был массив восьмеричных цифр. То есть вы преобразуете (например) три в {1,1}. Затем вы преобразуете это в восемьдесят один.
4. Примечание: не используйте
pow
или другие функции с плавающей запятой при проблемах , связанных только с целыми числами. Это причинит вам много головной боли.