Перевод больших чисел в двоичную систему без массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно перевести число -10^9<n<10^9 в двоичную систему, массивы и строки использовать нельзя, даже с переменными long long не хватает места для конвертации, ~ 520000 максимальное значение которое посчитается правильно, взять число больше - будет неверный результат, подскажите как лучше сделать не используя массивы данное задание? вот мой код:
Листинг программы
  1. #include <stdio.h>
  2. int main()
  3. {
  4. long long dv, ds, nc, os;
  5. scanf ("%lld",&ds);
  6. dv=0;
  7. nc=1;
  8. while (ds>1000000000 || ds<-1000000000)
  9. {
  10. printf ("put correct number\n");
  11. scanf ("%lld",&ds);
  12. }
  13. if (ds==0)
  14. {
  15. dv=0;
  16. printf("dv= %lld", dv);
  17. printf("\n");
  18. }
  19. if (ds>0)
  20. {
  21. while (ds!=0)
  22. {
  23. os=ds%2;
  24. ds=(ds-os)/2;
  25. dv=dv+os*nc;
  26. nc=nc*10;
  27. }
  28. printf("dv= %lld", dv);
  29. printf("\n");
  30. }
  31. else if (ds<0)
  32. {
  33. ds=ds*-1;
  34. while (ds!=0)
  35. {
  36. os=ds%2;
  37. ds=(ds-os)/2;
  38. dv=dv+os*nc;
  39. nc=nc*10;
  40. }
  41. dv=dv*-1;
  42. printf("dv= %lld", dv);
  43. printf("\n");
  44. }
  45. return 0;
  46. }

Решение задачи: «Перевод больших чисел в двоичную систему без массива»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.     long long ds, tmp;
  5.     int len, i;
  6.  
  7.     len = sizeof(ds)*8;
  8.     scanf ("%lld", &ds);
  9.  
  10.     if(ds<0) ds*=-1;
  11.  
  12.     tmp = (tmp=1)<<(len-1);
  13.     for (i=0; i<len; i++, ds<<=1)
  14.         printf("%d", (ds&tmp)?1:0);
  15.     printf("\n");
  16.  
  17.     return 0;
  18. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы