Кресты / Говнокод #21586 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
#include <iostream>

#define GAY(x) #x
#define STR(x) GAY(x)

#define A0(x, i) (i)*10 + (*(x)-'0')
#define A1(x, i) (*(x + 1) ? A0(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A2(x, i) (*(x + 1) ? A1(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A3(x, i) (*(x + 1) ? A2(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A4(x, i) (*(x + 1) ? A3(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A5(x, i) (*(x + 1) ? A4(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A6(x, i) (*(x + 1) ? A5(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A7(x, i) (*(x + 1) ? A6(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A8(x, i) (*(x + 1) ? A7(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A9(x, i) (*(x + 1) ? A8(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A10(x, i) (*(x + 1) ? A9(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A11(x, i) (*(x + 1) ? A10(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A12(x, i) (*(x + 1) ? A11(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A13(x, i) (*(x + 1) ? A12(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A14(x, i) (*(x + 1) ? A13(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
#define A15(x, i) (*(x + 1) ? A14(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')


#define STOI(x) A15(STR(x), 0)


int main(int argc, char *argv[])
{
    std::cout << STOI(01) << std::endl <<
                          STOI(08) << std::endl <<
                          STOI(0123) << std::endl <<
                          STOI(0123456789) << std::endl;

    return 0;
}

Теперь можно добавлять нолики в начало чисел для выравнивания!

Запостил: gost gost, (Updated )

Комментарии (16) RSS

  • Астрологи объявили неделю тернароговна.
    Ответить
  • На мой взгляд было большой ошибкой, когда в сишке (и в языках с сиподобным синтаксисом) решили ведущий нолик использовать для обозначения восьмеричной системы счисления (которая очень редко используется).

    Хорошо, что gost смог сгладить это недоразумение.
    Ответить
    • Вообще-то восмеричный числовой литерал используется в сишке чаще всего (после раскрытия макросов), по крайней мере чаще любой другой константы.
      Ответить
      • Восьмеричный литерал выглядит естественно для никсовых прав доступа типа rwx, когда используются триады битовых флагов. А где ещё применение восьмеричных литералов можно обосновать?
        Ответить
        • Я могу поспорить, что любой активно програмирующий на сишке использует 8-е литералы ежедневно. По крайней мере определённую восьмеричную константу. Очень часто она связана с указателями. Или начальными значениями счётчиков.
          Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8