这对许多人来说可能是一个简单的问题,但我不能为我的生活找出我的代码有什么问题。
我应该返回n(最大1000000)下同时包含7和9的数字。例如,n = 10返回0,n = 100返回2(从79和97)等。
int allWith7Or9(int n)
{
int count = 0;
for(int i = 0; i < n; i++)
{
if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
{
if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
{
count++;
}
}
}
return count;
}
我意识到我本来可以使用&amp;&amp;和我试过,但是我的代码不断提出0,我不知道为什么。我至少以3种不同的方式实现了这一点。
编辑:
我也试过这个:
int allWith7Or9(int n)
{
int count = 0;
for(int i = 0; i < n; i++)
{
if((i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7
|| i%1000000==7) && (i%10==9 || i%100==9 || i%1000==9
|| i%10000==9 || i%100000==9 || i%1000000==9))
{
count++;
}
}
return count;
}
答案 0 :(得分:1)
if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
{
if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
{
count++;
}
}
基本上是
if(cond1)
{
if(cond2)
{
count++;
}
}
基本上是:
if(cond1 && cond2)
{
count++;
}
因为两个条件必须为true才能递增count
。
这些条件同时并非如此,因为
i % 100 == 7
不是你可能意味着什么。这不是要检查70,71等数字,它会检查数字除以100时的余数为7,如7,107,207。所以
i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7
仅在i == 7
和
i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9
仅在i == 9
时匹配。 7 != 9
,因此计数器不会增加。
您可以将条件重写为:
i%10==7 || (i/10)%10==7 || (i/100)%10==7 etc
但是像这样写出来的东西很混乱且容易出错。
相反,请使用循环:
boolean found7 = false;
boolean found9 = false;
for (int ii = i; ii > 0: ii /= 10) {
switch (ii % 10) {
case 7: found7 = true; break;
case 9: found9 = true; break;
}
}
if (found7 && found9) {
count++;
}
这使用两个标志来指示您找到的数字。检查最后一位数字是否为7或9,然后除以10以丢弃该数字并继续前进到下一位。
答案 1 :(得分:1)
好的,第一个条件错了。例如79。 7的条件不起作用79%10 = 9,79%100 = 79.未检测到7个。 它应该像遍历数字的所有数字一样。所以检查一个号码可以是这样的。
boolean have7and9(int a) {
boolean seven = false, nine = false;
while(a > 0) {
if (a%10 == 7) seven = true;
if (a%10 == 9) nine = true;
a /= 10;
}
return seven && nine;
}
答案 2 :(得分:0)
根本问题是你的情况不对。
例如,i % 100 == 7
不会测试i
的“十位”数字是否为7
。 实际测试最后两位是07
。算一算......
要在单个表达式中测试“十位”数字为7
,您需要使用类似
(i / 10) % 10 == 7
(你应该能够从上面找到一个正确的解决方案。你可以采取至少两种不同的方法。)