如何在 c++ 中交替添加和减去用户输入

How to add and subtract user input in alternating order in c++

本文关键字:用户 输入 添加 c++      更新时间:2023-10-16

我应该测试一个数字是否可以被 11 整除。 我知道使用if (input % 11 == 0)检查数字是否可以被 11 整除需要一行代码 但是我应该编写一个算法,通过交替顺序加减数字来找出可除性,然后检查结果是否可以被 11 整除。 例如,数字 1364,程序将做:1 - 3 + 6 - 4,它是 0,它基本上可以被 11 整除。

这是我目前的算法,我知道它有点不连贯,我正在努力。它应该以交替顺序添加和减去用户输入,然后检查总和是否可以被 11 整除。

#include <string>
#include <iostream>
using namespace std;
int getInput(){
int input;
cout << "Enter the number" << "n";
cin >> input;
return input;
}

int For11(int x){
if (to_string(x).length() > 1 && to_string(x).length() < 11){ //Range
//string num = to_string(x);
for (int i = 1; i % 11 != 0; i++){
int sum = i + i - i + i; // The heart of the algorithm
cout << sum << "n";
if (sum % 11 == 0){
// some code goes here;
return 0;}
else {
// some code goes here;
return 1;}
}
}
}

int main() {
For11(getInput());
return 0;
}

你几乎拥有它。

最大的问题是这部分就在这里:

int sum = i + i - i + i;

假设i0。那会是什么样子:

0 + 0 - 0 + 0

这当然是0.

现在假设i1

1 + 1 - 1 + 1

等于 2。

如果你继续前进,很容易看出总和总是等于2 * i。那根本不是你想要的。

您想要的是根据i的值将一些数字添加到运行总计中:

int sum = to_int(to_string(x)[0]); // to_int would be some function to convert an
// char to an integer it is not necessarily a 
// standard function. I'll leave that part for
// you to figure out
for(int i = 1; i % 11 != 0; i++) {
if(i%2 == 0) {
sum += to_int(to_string(x)[i]);
} else {
sum -= to_int(to_string(x)[i]);
}
}
//...

希望这足以让你开始。

如果我理解得很好,您想将用户给出的任何数字转换为复合该数字的数字。如果用户输入是:"123456",您希望捕获此输出的整数变量:{1,2,3,4,5,6},然后将其操作到算法中。在这种情况下,我的建议是使用std::string,然后您可以对字符串的每个字符进行转换以(int)。我建议下一个代码,但请注意,它不是为了检测用户是否输入数字以外的其他字符而设计的。另请注意,要进行转换,我在字符代码中减去 48,因为它与 ASCII 相对应。

编辑:我不知道它是否会帮助你,因为你的问题在某些时候很模糊,但至少

对我来说很有趣。#include <iostream>

#include <string>

#include <vector>

int signFun(int i) {

int sign{-1};
if (i % 2== 0) return 1;
else return -1;

}

int main() {

std::string userInputNum;
std::cout << "Introduce a number" << std::endl;
std::cin >> userInputNum;
std::vector<int> digits(userInputNum.length());
int sumDigits{0};
for (unsigned i=0; i<userInputNum.length(); ++i) {
digits[i] = (int)(userInputNum.at(i)-48);
sumDigits += signFun(i)*digits[i];
}
std::cout << sumDigits << std::endl;

}