Collat​​z猜想C ++

时间:2015-02-18 22:24:55

标签: c++

我创建了这个功能(见下文),效果很好;但是,我的任务是更改函数以获取一个参数,该参数仅为我传递给它的函数执行相同的操作。

int collatz(){
int temp, num;
//num = 0;
cout << "pick a number to turn into one:";
cin >> num;
temp = 0;

while(num != 1){
    if(num%2 == 0){
    num = num/2;
    temp++;
    }
    else if(num&2 != 0){
        num = (3*num) + 1;
        temp++;
    }

}
cout << num << "number of times run: " << temp;
return 0;}

我想出了这个;但是,它给了我一个错误:

error C3861: 'collatztwo': identifier not found warning C4554: '&' : 
check operator precedence for possible error; 
use parentheses to clarify precedence

int collatztwo(int a){
int temp, num;
//num = a;

temp = 0;

while(a != 1){
    if(a%2 == 0){
    a = a/2;
    temp++;
    }
    else if(a&2 != 0){
        a = (3*a) + 1;
        temp++;
    }

}
cout <<  "looped: " << temp;
return 0;}

1 个答案:

答案 0 :(得分:0)

根据评论中列出的错误OP:

error C3861: 'collatztwo': identifier not found 

当您创建新功能时,您是否在呼叫站点之前添加了prototype?您必须在源文件的顶部声明int collatztwo(int a);,或者在使用它之前移动函数定义。

warning C4554: '&' : check operator precedence for possible error; use parentheses to clarify precedence

正如评论中已经提到的,你需要在a&2周围加一对括号,否则它会做错事。 else if ((a&2) != 0){