Блог пользователя _Nursultan

Автор _Nursultan, история, 8 лет назад, По-русски
for (int i = 0; i < n; i++) 
	if (a[i] > 0)
		ans += a[i];
for (int i = 0; i < n; i++) 
	if (a[i])
		ans += a[i];

Почему первый if выдает правильный ответ, а второй нет? Разве это не одно и тоже?

  • Проголосовать: нравится
  • +15
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Нет, не одно и то же.

В первом варианте суммируются только положительные значения, а во втором — все отличные от нуля значения.

»
8 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

if ( a[i] ) эквивалентно if ( a[i] != 0 ), а у тебя if ( a[i] > 0 ).

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Специфика приведения Int-a (как signed, так и unsigned) такова, что любое значение, отличное от нуля считается true, ноль же считается false. Как вы понимаете, -1 отличен от нуля, так что при if(a[i]) эквивалентно if(a[i]!=0)

P.S. MS Edge не отобразил комментариев, подумал, что их еще нет, прошу прощения за повторение