Как получить большое целое число в качестве входных данных и сохранить его в памяти - PullRequest
3 голосов
/ 24 июня 2010

Я знаю, что выполнение арифметики с большими целыми числами в мозговом потоке, хотя, возможно, иногда довольно утомительно, вполне возможно.

Однако, что меня интересует, так это то, что общепринятые передовые практики используются для ввода больших целых чисел (или, я полагаю, даже строк) в качестве входных данных.

Большинство компиляторов / интерпретаторов позволяют вам одновременно вводить полные строки в качестве входных данных (а затем каждый символ читается отдельно с ,). Но что мне интересно, так это - как вы можете прочитать один, если вы не знаете, когда поток ввода остановится? Я полагаю, что один из способов - сказать пользователю добавить определенный символ / строку символов к их числу, чтобы указать, что все кончено, но это кажется не очень удобным для пользователя.

Я бы предпочел ответ, который учитывает переносимость (решения, специфичные для реализации, представляют интерес, но не являются главной целью этого вопроса). Если не существует полностью независимого от реализации способа сделать это, следующий, который сработает в большинстве реализаций и будет неудачно завершен неудачей, в противном случае будет следующим лучшим вариантом.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Большинство языков позволяют вам читать строки из ввода (например, gets () в C, ReadLine () в C # и т. Д.). Почему бы не попросить пользователя ввести каждое значение в виде строки (то есть разделенной вводом)?

0 голосов
/ 18 октября 2013

На самом деле я разместил один и тот же код для другого вопроса для другой цели.Здесь следующий код будет продолжать принимать ASCII того, что вы печатаете, если не встречается символ новой строки. Затем печатается то, что вы ввели.

Не беспокойтесь о портативности ;Я уже реализовал добавление двух n-значных чисел с этой стратегией чтения чисел, вы можете найти здесь .

> +
[ - >,>+< 
  ----- -----    ; minus 10
  [              ; if enters means it is not a \n
    +++++ +++++  ; restore prev value
    < 
  ] >>           ; moving forward
]
                 ; numbers are 0 0 49 0 50 0 51
                 ; for input 123
<<<<[<<]         ; moving to the beginning
>>               ; reaching first char
[.>>]            ; just printing till end
...