我很困惑我如何迭代我的int,然后把结果放在一个int矢量..我需要为游戏做这个,帮助将非常感激...老实说,我有不知道如何制作这个函数,它将遍历int ...
cout << "\n PLEASE ENTER A 4 DIGIT BINARY! OR PROGRAM WILL EXIT \n\n\t";
cin >> binaryCin;
evaluateNum(binaryCin);
void MasterMind::evaluateNum(int &bin) {
// Need to iterate through binarycin and then put it in a vector<int>..
}
答案 0 :(得分:1)
好的,既然你不能使用字符串,我就必须改变我的答案。所以对于速度的囊。我会用数学。零是一个问题,但只需要一个if语句来检查分区后的占位符,然后从那里开始。我确定你可以使用一个库来使这更容易,但听起来不像你可以使用任何这些,几乎就像这是家庭作业。所以我们必须这样做。此外,不要担心小数位,因为它是int,它将修剪小数点。 soo 427/100 = 4.27其中int只是4.我相信编译器总是截断,如果我错了,请告诉我。
void MasterMind::evaluateNum(int &bin)
{
std::vector<int> numbers();
int thousand,hundred,ten;
int placeholder = 0;
thousand = 1000;
//bin = 4327
placeholder = thousand / bin;
//subtract the thousand position out of bin
bin -= placeholder * thousand;
numbers.push_back(placeholder);
//now you have 327
//subtract the hundreds spot now
hundred = 100;
placeholder = hundred / bin;
bin -= placeholder * thousand;
numbers.push_back(placeholder);
//now you have 27 now tens
ten = 10;
placeholder = ten / bin;
bin -= placeholder * ten;
//now you have just 7 in bin and 2 in place holder
numbers.push_back(placeholder);
numbers.push_back(bin);
}
这就是你如何分开用户传入的整数。您应该检查以确保数量不大。您需要为0添加一个检查/条件,如果值为0,则只丢弃占位符,而不是bin -= placeholder * ten
。它将是bin -= ten
;或者只是完全跳过它,我不记得C ++是将026作为026处理还是只处理26处。运行一次为零,你就会得到你的答案。
答案 1 :(得分:0)
这比基于固定数学的计算更好
void MasterMind::evaluateNum(int &bin) {
int n = bin;
int i=0;
vector<int> arr;
while(n!=0){ // loop will work for any size of binary number
int tmp = n & 1;
arr.push_back(tmp);
n>>=1;
i++;
}
std::reverse(arr.begin(),arr.end()); // since loop will give you reverse
}
而且我没有看到任何你想要的字符串&#34;没有修改过&#34;但如果你引用bin那么它就不会使用额外的变量
进行修改