我正在尝试编写一个能够检测数字中是否找到数字的函数:
// returns 1 if source contains num, 0 otherwise
int contains_num(source, num);
例如,contains_num(12345,3)返回1而contains_num(12345,6)返回0.。
我不知道如何解决这个问题。可能不能使用指针,数组等。
有什么想法吗?感谢。
答案 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而你的数字用完了,你可以确定这个数字不包含你想要的数字。