此题和我们平时喝酒时数7,是一模一样的最容易错是27、28,56、57,也就是包含7的数字,还有7的倍数都要数出来 。
对于7的倍数直接取余判断就可以而对于包含7的则需要按位判断,直接上程序:
#include<iostream>
using namespace std;
bool contain7(int n)
{
int s = 0;
while (n)
{
s = n % 10;
if (s != 0 && s % 7 == 0)
{
return true;
}
n /= 10;
}
return false;
}
int main()
{
int n, count;
cin >> n;
count = 0;
if (n<7)
{
cout << 0 << endl;
return 0;
}
for (int i = 7; i <= n; i++)
{
if (i % 7 == 0)
{
count++;
continue;
}
if (contain7(i))
{
count++;
}
}
cout << count << endl;
return 0;
}
结论:在按位判断是要有s!=0的判断,这题虽然简单,但是还是要注意细节,细节决定成败!!!