C - 需要检测数字中是否存在数字(hw)

时间:2009-12-24 19:30:02

标签: c

我正在尝试编写一个能够检测数字中是否找到数字的函数:

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

例如,contains_num(12345,3)返回1而contains_num(12345,6)返回0.。

我不知道如何解决这个问题。可能不能使用指针,数组等。

有什么想法吗?感谢。

4 个答案:

答案 0 :(得分:3)

由于这是作业,我不想马上给你整个答案。相反,我会问一系列问题,让你在评论中回答,所以我只是引导你找到正确的答案而不是直接给你。

所以,你有一个数字,你想把它分解成个别数字。你能想到一种从数字中提取一个数字的方法吗,比方说,最后一个数字?想想每个数字代表什么,以及如何将一个数字与其他数字隔离开来。

答案 1 :(得分:1)

查看问题的另一种方法是:

  • 数字的字符串表示是否包含特定数字?

将数字转换为字符串相对容易;有字符串搜索功能来查找特定字符是否出现在字符串中。

这具有处理负数的优点,而我看到的一些建议在负数上失败(其余大部分都未明确解决问题)。 (问题:为什么?)

答案 2 :(得分:0)

这应该有效:

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

答案 3 :(得分:0)

您的答案取决于表示数字的基数。例如,数字255在基数10中写入时包含5,但在基数16中则不包含。你的基数似乎是10。

所以你要做的是查看数字的最后一位数字,看看它是否是你想要的数字。使用模运算符(%)可以轻松找到最后一位数字。如果它是你想要的数字,你就完成了。如果没有,并且如果有更多数字,您可以丢弃最后一个数字并再次重复该过程,获得通过将原始数除以10得到的数字并丢弃小数部分。在C中,除法运算符/如果它们的两个操作数都是整数类型,它会自动为你执行此操作。

如果因为除法给你0而你的数字用完了,你可以确定这个数字不包含你想要的数字。