Ввод-вывод целых чисел произвольной длины

Тема в разделе "WASM.BEGINNERS", создана пользователем Deadushka, 18 янв 2009.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Deadushka
    Алгоритм должен быть примерно такой
    0. в твоем буфере в памяти под число помещаешь ноль
    1. получаешь символ -- проверяешь цифра ли это
    если не цифра и не Enter сообщаешь об ошибке, если цифра отнимаешь от нее код "0", Enter -- переходишь к пункту 4.
    2. число находящееся в буфере умножаешь на 10 и складываешь с только что полученной цифрой
    3. возвращаешься к пункту 1.
    4. что-то делаешь со своим числом
     
  2. zicker

    zicker Member

    Публикаций:
    0
    Регистрация:
    23 дек 2008
    Сообщения:
    132
    Длинные числа удобней хранить и обрабатывать в массиве, подробнее например здесь
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.317
    блин... если такая задача стоит, то почему не считывать число как строку (последовательность символов "0" - "9", "," и "-"), таким же образом хранить в памяти и таким же образом осуществлять вывод?
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Rel
    Спасибо, я это же предложил еще в 15 посте. Просто зачем умещать в регистрах то, что там и так не поместится. Вот строки другое дело. Тебе лишь надо написать алгоритмы манипуляции со строками без преобразования числа в двоичный вид. Т.е.
    Код (Text):
    1. '09931'+'521000'=>
    2. int j=0, l=lingth(s0), x=max(l, length(s1)), n=(min(l, length(s1)));
    3. for (int i=0; i<n; i++)
    4. {s2[i]=j+s1[i]+s0[i]-'0';
    5.  if (s2[i]>'9') {j=1; s2[i]-=10;} else j=0;}
    6. if (n<x) for (int i=n+1; (i<x)|(j>0); i++)
    7. {s2[i]=(l=x)?s0[i]+j:s1[i]+j;
    8.  if (s2[i]>'9') {j=1; s2[i]-=10;} else j=0;}
    9. =>
    10. s2[0]=0+'1'+'0'-'0'='1' j=0
    11. s2[1]=0+'3'+'0'-'0'='3' j=0
    12. s2[2]=0+'9'+'0'-'0'='9' j=0
    13. s2[3]=0+'9'+'1'-'0'='0' j=1
    14. s2[4]=1+'0'+'2'-'0'='3' j=0
    15. &
    16. s2[5]='5'+0='5'
    17. s2='530931'
    просто надо написать такие алгоритмы на ассемблере. вот пример сложения сразу в строковом виде