c ++, как проверить каждую цифру в целом числе и сравнить ее с базовым числом - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблемы с выяснением, как разделить каждую цифру на целое число. По сути, я должен спросить пользователя, что такое базовый номер, а затем попросить у него два целых числа. Теперь, У меня есть задача проверить, чтобы каждая цифра в двух целых числах была меньше базового числа (я понятия не имею, как это сделать!).

Примером может быть что-то вроде этого:

Enter a base:
3
Enter your first number:
00120
Enter your second number:
11230

Мне нужно проверить каждую цифру в первом и втором числе. Где первое число будет действительным, потому что все цифры меньше 3, а второе число будет недействительным, потому что в нем есть 3, который не меньше базового.

Я потратил несколько часов, пытаясь понять это самостоятельно, и мне не повезло.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Если вы уверены , что на входе нет никаких нечисловых символов, вы можете использовать оператор %, чтобы явно проверить каждую цифру. Вот простое представление о том, что я имею в виду:

#include <iostream>

bool isValid(int numb, int base) {
  do  {
    if (numb % 10 >= base) { // if the digit cannot be used with this base
      return false;          // the integer is invalid 
    }
  } while (numb /= 10);

  return true;               // if all the digits passed the above test, 
                             // the integer is valid
}

int main() {
  int numb, base;
  std::cin >> numb >> base;

  std::cout << "input " 
    << (isValid(numb, base) ? "is " : "is not ")
    << "valid " << std::endl;
  return 0;
}
0 голосов
/ 08 ноября 2018

Если вы запрашиваете ввод данных пользователем, у вас еще нет целых чисел . У вас есть текст , и все, что вам нужно сделать, это проверить, содержит ли текст действительные цифры. Пока вы не попадаете в базы больше 10, это просто, потому что символы '0' ..'9' должны быть смежными и увеличиваться, поэтому вы можете преобразовать цифру в ее числовое значение, вычтя из нее '0'.

bool is_valid(char ch, int base) {
    return isdigit(ch) && ch - '0' < base;
}
...