С++ как проверить каждую цифру в целом числе и сравнить ее с базовым числом

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

Пример может быть примерно таким:

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

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

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


person xxrachh    schedule 08.11.2018    source источник
comment
Вам может пригодиться оператор по модулю %.   -  person user4581301    schedule 08.11.2018
comment
Рядом с дубликатом: C++ получает каждую цифру в int. Игнорировать выбранный ответ. Хотя это действительно работает, его жестокая неэффективность заработала отрицательные голоса, которые он получил. Сосредоточьтесь на более поздних ответах.   -  person user4581301    schedule 08.11.2018
comment
Вам могут быть полезны std::stoi и семья.   -  person user4581301    schedule 08.11.2018
comment
Введите число в виде строки. Числовое значение цифры можно извлечь: digit_value = numeric_string[i] - '0';   -  person Thomas Matthews    schedule 08.11.2018


Ответы (2)


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

bool is_valid(char ch, int base) {
    return isdigit(ch) && ch - '0' < base;
}
person Pete Becker    schedule 08.11.2018
comment
Пожалуйста, прочитайте ISO/IEC 9899:1999 §7.4/1 (альтернатива: stackoverflow.com/questions/17975913/) - person Swordfish; 08.11.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;
}
person Ayxan Haqverdili    schedule 08.11.2018