计算数字

时间:2017-08-20 10:42:18

标签: c++

以下是问题:

取整数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;
  }
};

3 个答案:

答案 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)

如果nd均为零,则0的计数应为1.

答案 2 :(得分:-1)

当我们需要 d=0 和 n!=0 时,您错过了这种情况。作为回答,您从 1 开始运行循环,因此您缺少起始零。 最后你只需要包含一行。

if (d==0) 
    return count+1;
else
    return count;