以下是问题:
取整数n(n> = 0)和数字d(0 <= d <= 9)作为整数。将所有数字k(0 <= k <= n)平方在0和n之间。计算在写入所有k ** 2时使用的数字d。调用nb_dig(或nbDig或...)函数,将n和d作为参数并返回此计数。
但产量低于预期。任何人都可以告诉我缺少什么:
预期:等于4700
实际:4699
class CountDig
{
public:
static int nbDig(int n, int d)
{
if(n==0 && d==0)
return 0;
int c = 0;
for(int i = 0;i<=n;i++)
{
int p=i*i;
while(p)
{
int l;
l=p%10;
if(l==d)
c++;
p=p/10;
}
}
return c;
}
};
答案 0 :(得分:2)
你不计算第一个零(0 * 0),因为循环条件是p(而(p))。
因此,如果p为零且d为零,则添加一个条件以向c添加一个
class CountDig
{
public: static int nbDig(int n, int d)
{
int c=0;
if (d==0)
c=1; // start from 1, when counting 0
for(int i=1;i<=n;i++)
{
int p=i*i;
while(p)
{
int l;
l=p%10;
if(l==d)
c++;
p=p/10;
}
}
return c;
}
};
答案 1 :(得分:0)
如果n
和d
均为零,则0
的计数应为1.
答案 2 :(得分:-1)
当我们需要 d=0 和 n!=0 时,您错过了这种情况。作为回答,您从 1 开始运行循环,因此您缺少起始零。 最后你只需要包含一行。
if (d==0)
return count+1;
else
return count;