本体的解题思路是,定义一个string类型的vector向量容器,把数字转换成字符串,然后把字符串添加到向量中,然后迭代vector向量,遍历向量中的每一个string。定义一个整型数组,这里采用了一个小技巧,整型数组的下标就分别对应着0~9的数,a[i]保存i出现的次数。
#include <vector>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <sstream>
using namespace std;
int a[10];
//数字转字符串
string num2str(int i)
{
stringstream ss;
ss<<i;
return ss.str();
}
int main(int argc, const char * argv[]) {
int n;
vector<string> v;
cin >> n;
while (n--) {
int m;
cin >> m;
string s;
for (int i = 1; i <= m; i++) {
s = num2str(i); //数字转字符串
v.push_back(s); //把转换后得到的字符串放到string类型的向量中
}
vector<string>::iterator it; //定义迭代器
for (it = v.begin(); it != v.end(); it++) {
s = *it;
for (int i = 0; i < s.length(); i++) {
a[s[i] - 48]++;
}
}
for (int i = 0; i <= 9; i++) {
if (i == 9) {
cout << a[i] << endl;
} else {
cout << a[i] << " ";
}
}
v.clear(); //清空向量
memset(a, 0, sizeof(a)); //清空数组
}
return 0;
}