2017-08-20 80 views
-3

這裏的問題:計數數字

以一個整數N(N> = 0)和一個數字d(0 < = d < = 9)爲整數。在0和n之間平方所有數字k(0 < = k < = 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; 
    } 
}; 
+2

又是怎麼回事'N'和'D',他們的價值觀? –

+1

'我<= n'會導致訪問'a [i]'出界。 – user0042

+0

@FilipKočica這只是從驅動程序中調用的函數! – yaoshinga

回答

0

如果nd均爲零,那麼0計數應爲1

2

您不計算第一個零(0 * 0),因爲循環條件是p(while(p))。

所以添加條件添加一個到c,如果p是零,d是零

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; 
} 
}; 
+0

if條件:if(n == 0 && d == 0)專門用於那個。 – yaoshinga

+0

該特殊情況不能解決問題。這不是n和d是零的地方,你需要擔心。這是我在你的循環中零的地方。 – Mic

+0

工作正常!非常感謝! – yaoshinga