Zafd 0 Опубликовано: 16 января 2012 Поделиться Опубликовано: 16 января 2012 Может на форуме знатоки обитают, есть вопрос: В общем помогите задачку решить: Нужно найти суму всех чисел в файле. (Одна строка - одна цифра). 1) Как определить конец файла? 2) Как считать числа, которые не влезают в LOng? Причём ограничение по памяти 64 мб, по времени 1с. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
hawkeye 21 Опубликовано: 16 января 2012 Поделиться Опубликовано: 16 января 2012 Не знаю Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
*Shinigami* 268 Опубликовано: 16 января 2012 Поделиться Опубликовано: 16 января 2012 Конец файла - eof (end of file) Время считывания - смотря какая среда, если билдер, то таймером банально сделай - функция считывания длится строго время заданное в таймера Насчёт памяти не понял и само задание не ясно - тоесть числа расположены так?: 1 2 3 4 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
creker 0 Опубликовано: 16 января 2012 Поделиться Опубликовано: 16 января 2012 1) Как определить конец файла? Или eof, или комбинация fseek/ftell для определения размера файла, что уже даст понять, где ожидать конец файла. Как там в STL это делается не знаю. 2) Как считать числа, которые не влезают в LOng? long - это 32-битная переменная. Можешь взять 64-битные - смотри доки компилятора, какой тип у него это. Если тебе и этого не хватает, то тебе на помощь http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic . Качаешь спец библиотеку, вроде http://gmplib.org/ (которая собирается под виндой, если что) и все - ты ограничен лишь оперативной памятью. Ну или, если есть желание, реализуй самостоятельно. Для сложения это не так уж сложно, придется разве что вспомнить системы счисления и булеву алгебру. В твоем случае вообще лучше всего подойдет fscanf. Вот такой код FILE* f = fopen("1.txt", "r"); int a = 0; while (fscanf(f, "%d", &a) != EOF) { ... } построчно прочитает файл, записывая в "a" очередное значение, пока не дойдет до конца. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Zafd 0 Опубликовано: 17 января 2012 Автор Поделиться Опубликовано: 17 января 2012 Или eof, или комбинация fseek/ftell для определения размера файла, что уже даст понять, где ожидать конец файла. Как там в STL это делается не знаю. long - это 32-битная переменная. Можешь взять 64-битные - смотри доки компилятора, какой тип у него это. Если тебе и этого не хватает, то тебе на помощь http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic . Качаешь спец библиотеку, вроде http://gmplib.org/ (которая собирается под виндой, если что) и все - ты ограничен лишь оперативной памятью. Ну или, если есть желание, реализуй самостоятельно. Для сложения это не так уж сложно, придется разве что вспомнить системы счисления и булеву алгебру. В твоем случае вообще лучше всего подойдет fscanf. Вот такой код FILE* f = fopen("1.txt", "r"); int a = 0; while (fscanf(f, "%d", &a) != EOF) { ... } построчно прочитает файл, записывая в "a" очередное значение, пока не дойдет до конца. Спасибо всем!! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас