Перейти к публикации

Программирование на С++


Zafd
 Поделиться

Рекомендованные сообщения

Может на форуме знатоки обитают, есть вопрос:

В общем помогите задачку решить:

Нужно найти суму всех чисел в файле. (Одна строка - одна цифра).

1) Как определить конец файла?

2) Как считать числа, которые не влезают в LOng?

Причём ограничение по памяти 64 мб, по времени 1с.

Ссылка на комментарий
Поделиться на других сайтах

Конец файла - eof (end of file)

Время считывания - смотря какая среда, если билдер, то таймером банально сделай - функция считывания длится строго время заданное в таймера

Насчёт памяти не понял и само задание не ясно - тоесть числа расположены так?:

1

2

3

4

Ссылка на комментарий
Поделиться на других сайтах

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" очередное значение, пока не дойдет до конца.

Ссылка на комментарий
Поделиться на других сайтах

Или 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" очередное значение, пока не дойдет до конца.

Спасибо всем!!

 

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...