LINUX.ORG.RU

подскажите алгоритм


0

0

Не лезет в голову ничего красивого, а хоцца именно такого. Задача: Число, заранее неизвестное разложить на отдельные символы: 9 -> 9 18 -> 1,8 135 -> 1,3,5

Что подскажите красивого?

anonymous

Что-то не понял... Нужна сумма простых чисел или что? о.О

anonymous
()

#include <stdlib.h>
#include <string.h>
#include <limits.h>

char *my_itoa(int n)
{
  static int const buf_len = sizeof(int) * CHAR_BIT / 3 + 2;
  char *rv = (char *)malloc(buf_len);
  char *p = rv + buf_len;
  int sgn = n < 0;

  if (sgn)
  {
    n = -n;
  }
  *--p = 0;
  if (n == 0)
  {
    *--p = '0';
  }
  for (; n; n /= 10)
  {
    *--p = '0' + n % 10;
  }
  if (sgn)
  {
    *--p = '-';
  }
  return memmove(rv, p, buf_len - (p - rv));
}

dilmah ★★★★★
()

(defun number-to (number result-type)
  (map result-type #'digit-char-p
       (princ-to-string number)))

stassats ★★★★
()
Ответ на: комментарий от dilmah

Бальшой спасиб ;) Щаз за сигаретой вникну в как оно работает и нарисую свою реализацию :) У меня просто получался обход не снизу вверх, а сверху вниз, поэтому возникала проблема, что на входе число должно быть меньше некоторой константы. да и из 345 я получал не 3,4,5, а 5,4,3 :)

anonymous
()

In [7]: map(int, str(1000)) Out[7]: [1, 0, 0, 0]

anonymous
()

Так что нужно получить? символы или цифры?? Что за язык? Если символы, a язык - неважно, то, например, так: 12345.to_s.each_byte {|s| puts s.chr} :-)

smh ★★★
()
Ответ на: комментарий от smh

Символы. Но символы я могу получить как цифры + 0x30, если память не изменяет. Накрайняк в функцию вывода на индикатор добавлю маааленький lookup в табличку: цифра - символ.
Следовательно, мне хватит и цифр :)
число, думаю, не будет больше 100000, но хотелось универсальности.
Язык - C.
Доступа к STL/boost нет, потому что пишу под примерно 8051й контроллер, и потому, что просто C :)

anonymous
()
Ответ на: комментарий от generatorglukoff

Сам индус :(
У меня нет sprintf.
Поэтому, блин, мне нужно ручками все сделать.

Впрочем Jennic что-то сделали не таг, и я не могу пользоваться % если один из аргументов не степень двойки :/

anonymous
()
Ответ на: комментарий от generatorglukoff

тем более логарифм это дорогая функция и ради экономии нескольких байт смысла её использовать нет

Reset ★★★★★
()
Ответ на: комментарий от cobold

Есть.
Но его нужно очень странно подключать, обещают пофиксить к следующему релизу SDK.
Т.е. без фикса работают операции /, % только если правый аргумент степень двойки.
Пережил это добавлением своих(честно стыреных, не силен в математике), слегка медленных функций.
Но этот вариант устраивает.

anonymous
()
Ответ на: комментарий от anonymous

А странных функций типа "приведение к двоично-десятичному формату" у тебя там, конечно, нету?

Эта штука ужасно поразила мое воображение, когда я еще в школе читал про x86 ассемблер. Это чуть ли не единственное, что я из него помню ;-)

anonymous
()
Ответ на: комментарий от anonymous

А я вооообще ничего не знаю про ассемблер этой железки. Документацию по процу - только через NDA. А для простых смертных - есть некое API через которое я должен рулить железкой и все. В этом апи нет ничего кроме работы с периферией(ADC,DAC,таймера,радио), и стека ZigBee с неким подобием OS(я бы сказал, что шедулера) в придачу. Т.е. все реализовывать руками, чего нет. И чем мне BCD может помочь - моя плохо понимать. Мой индикатор хочет код символа, для отображения.

anonymous
()
Ответ на: комментарий от anonymous

> И чем мне BCD может помочь - моя плохо понимать. Мой индикатор хочет код символа, для отображения.

Ну конвертишь в BCD, потом распаковываешь каждый полубайт в байт, потом добавляешь к каждому ord('0'), и вуаля, строчка.

Оно ж, вроде, для этого и нужно, разве нет?

anonymous
()
Ответ на: комментарий от chicane

Для папуасов повторяю: у меня нет НИКАКОГО printf.
сколько можно?

anonymous
()
Ответ на: комментарий от anonymous

Гхм. А идея. Хотя все равно нет ничего такого у мну :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.