Kenny# Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 Имею следующую не решенную задачу тесты не проходит[align=justify](Время: 1 сек. Память: 16 Мб Сложность: 19%)Требуется подсчитаять сумму целых чисел от 1 до N.Входные данные в единственной строке входного файла INPUT.TXT записано единственное целое число N, не превышающее по абсолютной величине 10000.Выходные данныеВ единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел от 1 до N.INPUT.TXT OUTPUT.TXT5 15[/align]На вид все просто но мой код не проходит 3-ый тест из 8.Подскажите где что я просмотрел#include short n,s=0;int main(){freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);scanf("%d",&n);if ((abs(n)<=10000)&&(n>0)){s=((n-(n-1)+abs(n))*(abs(n))/2);printf("%d",s);}if (abs(n)==0){s=n+1;printf("%d",s);}if (n<0){s=n-1+n;printf("%d",s);}return 0;}#include < stdio.h >сильно не пинайте я учусь Ссылка на комментарий
Lakers Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 n>0 может быть и отрицательным Ссылка на комментарий
Whirlpool Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 + не копить сумму в short'e Ссылка на комментарий
Lakers Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 Whirpoolну да, лучше не short a long как минимум=) Ссылка на комментарий
Whirlpool Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 +s=((n-(n-1)+abs(n))*(abs(n))/2); не будет ли эквивалентноs=(1+abs(n))*(abs(n))/2); ? Ссылка на комментарий
superman Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 По условию задачи N >= 1 ведь?Тогда все проще намного:#include < stdio.h >int main(){ int n; freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%d",&n); printf("%d", (1 + n)*n/2); return 0;}А тест не проходит скорее всего из-за переполнения short.Допустим n = 10000.Тогда сумма равна 10001 * 10000 / 2 = 50005000То есть int (4 байта) будет достаточно. Ссылка на комментарий
Kenny# Опубликовано 7 ноября, 2010 Автор Жалоба Поделиться Опубликовано 7 ноября, 2010 число N не превышает по модулю 10000.судя по всему может быть отрицательным.т.е при -4 должно быть 1+0-1-2-3-4=-9 правильно я понял? Ссылка на комментарий
superman Опубликовано 7 ноября, 2010 Жалоба Поделиться Опубликовано 7 ноября, 2010 а, ну в таком случае так:#include #include int main(){ int n; freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%d",&n); int num = 1 + abs(n - 1); printf("%d", (1 + n)*num/2); return 0;} Ссылка на комментарий
Kenny# Опубликовано 8 ноября, 2010 Автор Жалоба Поделиться Опубликовано 8 ноября, 2010 спасиб всем !!!сделал.мин по памяти и времени Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти