c++中整数中数字的频率



我已经给出了一些整数,我必须计算数字中特定数字的频率。 输入例子:

447474

228
6664
81

第一个数字表示列表中整数的个数。在这种情况下,我发现频率是4。我试图将整数更改为数组,但它不工作。


#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int main() {

int n;
cin>>n;

for (int i=0; i<n; i++)
{
int x;
cin>>x;
int frequency=0;
int t=log10(x);
int arr[t];
for (i=t; i>0; i--)
{
arr[i]=x%10;
x=x/10;
}
for(int i=0; i<t; i++)
{
if(arr[i]==4)
{
frequency++;
}

}

std::cout << frequency << std::endl;

}
return 0;
}

无需创建数组,也无需确定位数。循环直到数字为0。

int digitCount(int n, int d) {
if(n < 0) n = -n;
int count = 0;
for(; n != 0; n /= 10)
if(n % 10 == d) count++;
return count;
}

测试:

cout << digitCount(447474, 4) << endl;
cout << digitCount(-447474, 4) << endl;

输出:

4
4

您的代码使用了非标准c++的vla。参见为什么变长数组不是c++标准的一部分?

log10(x)不是位数。例如log10(1234) == 3.09131516,但它是4位数字。此外,在循环的第一次迭代中,您正在访问超出边界的数组:arr[t]。在大小为t的数组中有效的索引是0,1,2,...,t-1。试图访问arr[t]是未定义的行为。

实际上你不需要任何数组。您可以立即检查它是否为4并计数,而不是将数字存储在数组中。

更简单的方法是将用户输入读取为std::string:

#include <string>
#include <algorithm>
#include <iostream>
int main() {
std::string input;
std::cin >> input;
std::cout << std::count(input.begin(),input.end(),'4');
}

也许您应该添加一些检查来验证用户输入实际上是一个有效的数字。但是,同样在读取int时,您应该验证输入。

最新更新