C - необходимо обнаружить наличие цифры в номере (hw) - PullRequest
0 голосов
/ 24 декабря 2009

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

// returns 1 if source contains num, 0 otherwise
int contains_num(source, num);

например, contains_num (12345, 3) возвращает 1, а contains_num (12345, 6) возвращает 0.

Я не уверен, как решить эту проблему. Вероятно, нельзя использовать указатели, массивы и тому подобное.

Есть идеи? спасибо.

Ответы [ 4 ]

3 голосов
/ 24 декабря 2009

Поскольку это домашнее задание, я не хочу сразу давать вам полный ответ. Вместо этого я задам ряд вопросов и позволю вам ответить в комментариях, поэтому я просто буду направлять вас к правильному ответу, а не давать его вам прямо.

Итак, у вас есть номер, и вы хотите разбить его на отдельные цифры. Можете ли вы придумать способ извлечь одну цифру из числа, скажем, последнюю? Подумайте, что представляет каждая цифра, и как вы могли бы выделить одну цифру от остальных.

1 голос
/ 24 декабря 2009

Альтернативный взгляд на проблему:

  • Содержит ли строковое представление числа конкретную цифру?

Относительно легко преобразовать число в строку; Существуют функции поиска строк, позволяющие определить, присутствует ли в строке определенный символ.

И это имеет смысл работать с отрицательными числами, в то время как некоторые из предложений, которые я видел, терпят неудачу с отрицательными числами (а большинство остальных не решают проблему явно). (Вопрос к вам: почему?)

0 голосов
/ 24 декабря 2009

Ваш ответ зависит от базы, в которой представлено число. Например, число 255 содержит 5, когда записано в базе 10, а в базе 16 - нет. Кажется, твоя база 10.

Итак, вы хотите посмотреть на последнюю цифру числа и посмотреть, хотите ли вы эту цифру. Последняя цифра может быть легко найдена с помощью оператора по модулю (%). Если это цифра, которую вы хотите, все готово. Если нет, и если есть еще цифры, вы можете сбросить последнюю цифру и повторить процесс снова для числа, полученного путем деления исходного числа на 10 и отбрасывания дробной части. В Си оператор деления / делает это автоматически, если оба его операнда имеют целочисленный тип.

Когда у вас заканчиваются цифры, потому что деление дает вам 0, вы уверены, что число не содержит требуемой цифры.

0 голосов
/ 24 декабря 2009

Это должно работать:

int Contains_Num(int source, int num)
{
  if (source == 0 && num == 0) return 1;

  int tmpSource = source;
  while (tmpSource != 0)
  {
    if (tmpSource % 10 == num) return 1;
    tmpSource /= 10;
  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...