我正在处理来自代码大战的编码问题,我无法从测试值以及他们为您提供的示例测试中计算出正确的答案! 这是提示: “取整数n(n> = 0)和数字d(0 <= d <= 9)作为整数。将0和n之间的所有数字k(0 <= k <= n)平方计算在写入所有k ** 2时使用的位数d。调用nb_dig(或nbDig或...)函数,将n和d作为参数并返回此计数。“
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include<array>
#include<assert.h>
#include<fstream>
using namespace std;
class CountDig
{
public:
static int nbDig(int n, int d);
};
int CountDig::nbDig(int n, int d)
{
int count = 0;
for (int i = 0; i < n; i++)
{
int j = i;
while (j > 0)
{
if (j % 10 == d)
count++;
j /= 10;
}
}
return count;
}
int main()
{
CountDig cnt;
//count.nbDig();
cout << cnt.nbDig(10, 1) << endl;
system("PAUSE");
return 0;
}
参数n和d的一个例子是 nbDig(10,1)和nbDig(25,1)。对于nbDig(10,1),预期答案应该是4,对于nbDig(25,1),它应该是11。
答案 0 :(得分:1)
int countDigit( int num, int digit ) {
if( num == 0 && digit == 0 ) return 1; // special case initial condition for 0 and 0
int count = 0;
int j = i;
while (j > 0)
{
if (j % 10 == d)
count++;
j /= 10;
}
return count;
}