#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
vector<int> v;
int N,S,P,Q,data=0,j=0;
cin >> N >> S >> P >> Q;
if((0<N<=10^8)&&(0<S,P,Q<2^31)){
int arr[N];
for(int i=0; i<N; i++)
arr[i]=arr[i-1]*P+Q;
data=arr[0];
for(int i=1; i<N; i++){
//!request for member 'compare' in 'arr[i]', which is of non-class type 'int'
if(arr[i].compare(data)==0)
j++;
else
data=arr[i];
}
cout<<j;
}
}
当我尝试运行上面的代码时,我收到了上面代码中提到的错误。错误是什么意思?有谁能详细解释一下我?
答案 0 :(得分:2)
要比较C ++中的两个数字,您可以使用==
:if (arr[i] == data)
就是您想要的。
此外,arr[i-1]
在循环的第一次迭代中的行为是 undefined 。解决这个问题。
int arr[N];
是一个可变长度数组,不是标准C ++,而是编译器扩展。请改用std::vector
。
最后(0<N<=10^8)&&(0<S,P,Q<2^31)
,虽然语法正确但没有做你认为它正在做的事情。阅读逗号运算符。你想写一些类似0 < N && N < 10^8 && 0 < S && 0 < P && Q < 2^31
的东西,假设你知道^
不是 C ++中的指数运算符
答案 1 :(得分:1)
声明
if((0<N<=10^8)&&(0<S,P,Q<2^31))
甚至没有达到您的期望。
比较运算符<
,<=
等是二元运算符,它一次比较两个操作数。你不能像检查范围一样链接它们。并且您也无法检查多个值(S,P,Q
) - 您需要一次执行所有单个测试,两个操作数。
同样^
是一个按位异或。 10^8
10
8
未被^
提升。更好的是,(0<N<=10^8)
的优先级低于比较运算符,因此(((0 < N) <= 10) ^ 8)
在功能上等同于gwmi win32_logicaldisk
。
我强烈建议你做一些你显然没有烦恼的事情 - 阅读关于C ++的基本基础文本,并理解表达式是如何工作的。