это дает мне ожидаемый идентификатор до {токен - PullRequest
0 голосов
/ 16 января 2020

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

#include <iostream>

using namespace std;

int main()
{
    int s,a;
    cin >>a;
    if (a=!0)and(a<=1000000)
        {s=a*(a+1)/2;
        cout <<s;}

    return 0;
}

Ответы [ 2 ]

6 голосов
/ 16 января 2020

В C ++ оператор выбора if определяется следующим образом

selection-statement: 
    if ( condition ) statement 
    if ( condition ) statement else statement 

Как видно, условие должно быть заключено в скобки.

Также в этом подпункте есть опечатка. выражение

if (a=!0)and(a<=1000000)
    ****    

То есть это выражение

a=!0

эквивалентно

a = !0

и обозначает присвоение выражения !0 переменной a это эквивалентно

a = 1

Так что вы должны написать либо

if ( ( a != 0 ) and ( a <= 1000000 ) )

или

if ( a != 0 and a <= 1000000 )

Также обратите внимание на то, что переменная s должна быть объявленным имеющим тип long long int.

long long int s;
int a;

В противном случае выражение в правой части присваивания

    s = a*(a+1)/2;

может привести к переполнению.

Поэтому вы должны написать, например,

long long int s;
int a;

//…

s = ( long long int )a * ( a + 1 ) / 2;

С учетом всего сказанного ваша программа может выглядеть следующим образом:

#include <iostream>

using namespace std;

int main()
{
    long long int s;
    int a;

    cin  >> a;

    if ( a != 0 and a <= 1'000'000 )
    {
        s = ( long long int )a * ( a + 1 ) / 2;
        cout  << s  << '\n';
    }

    return 0;
}

Если, например, ввести

1000000

, то вывод программы будет

500000500000
1 голос
/ 16 января 2020

Это: if (a=!0)and(a<=1000000) отсутствует пара скобок (и вы, вероятно, имели в виду a!=0, а не a=!0, что совершенно отличается). Вероятно, это должно быть if ((a!=0)and(a<=1000000)).

...