0 c++ integer if-statement operators
问题是我不知道问题是什么。我试图查找它,在我看来一切似乎都正确,但不知何故并非如此。
#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;
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,选择 if 语句定义如下
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
Run Code Online (Sandbox Code Playgroud)
正如所见,条件应括在括号中。
另外你在这个子表达式中有一个错字
if (a=!0)and(a<=1000000)
****
Run Code Online (Sandbox Code Playgroud)
就是这个表情
a=!0
Run Code Online (Sandbox Code Playgroud)
相当于
a = !0
Run Code Online (Sandbox Code Playgroud)
并表示将表达式赋值!0给a等价于的变量
a = 1
Run Code Online (Sandbox Code Playgroud)
所以你必须写
if ( ( a != 0 ) and ( a <= 1000000 ) )
Run Code Online (Sandbox Code Playgroud)
或者
if ( a != 0 and a <= 1000000 )
Run Code Online (Sandbox Code Playgroud)
还要注意变量s应该声明为具有类型long long int。
long long int s;
int a;
Run Code Online (Sandbox Code Playgroud)
否则赋值右侧的表达式
s = a*(a+1)/2;
Run Code Online (Sandbox Code Playgroud)
可能导致溢出。
所以你应该写例如
long long int s;
int a;
//…
s = ( long long int )a * ( a + 1 ) / 2;
Run Code Online (Sandbox Code Playgroud)
考虑到所有所说的内容,您的程序可以如下所示。
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果例如输入
1000000
Run Code Online (Sandbox Code Playgroud)
那么程序输出将是
500000500000
Run Code Online (Sandbox Code Playgroud)