Как складывать и вычитать пользовательский ввод в чередующемся порядке в c ++ - PullRequest
1 голос
/ 17 октября 2019

Я должен проверить, делится ли число на 11 или нет. Я знаю, что требуется один строчный код, чтобы проверить, делится ли число на 11 или нет, используя if (input % 11 == 0) Но я должен написать алгоритм, который определяет делимость путем сложения и вычитания числа в чередующемся порядке, а затем проверяет,результат делится на 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;
}


Ответы [ 2 ]

0 голосов
/ 17 октября 2019

У вас это почти есть.

Самая большая проблема в этой части:

int sum = i + i - i + i;

Предположим, i равно 0. Как бы это выглядело:

0 + 0 - 0 + 0

Это, конечно, 0.

Теперь предположим, что i равно 1:

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]);
    }
}
//...

Надеюсь, этого достаточноначать.

0 голосов
/ 17 октября 2019

Если я хорошо понимаю, вы хотите преобразовать любое число, данное пользователем, в цифры, которые составляют это число. Если пользовательский ввод: «123456», вы хотите перехватить как целочисленные переменные этот вывод: {1,2,3,4,5,6}, а затем работать с этим в своем алгоритме. Для этого случая я предлагаю использовать std::string, а затем вы можете выполнить приведение к (int) для каждого символа строк. Я предлагаю следующий код, но обратите внимание, что он не предназначен для определения, вводит ли пользователь другой символ, кроме цифр. Заметьте также, что для выполнения приведения я вычитаю 48 из кода символа, потому что это соответствие ASCII.

edit: я не знаю, поможет ли это вам, потому что ваш вопрос был неопределенным в какой-то момент, нопо крайней мере, это было забавно для меня.

#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;

}

...