AcWing 338. 计数问题
原题链接
中等
作者:
AC_
,
2021-01-29 14:37:23
,
所有人可见
,
阅读 288
#include<iostream>
#include<cstring>
using namespace std;
int d[11];
int cnt1[10], cnt2[10];
char s[11];
void tos(int n)
{
for (int i = 0; i < 11; i ++) s[i] = '\0';
int idx = 0;
while (n) {
s[idx ++] = (n % 10) + '0';
n /= 10;
}
int len = strlen(s);
for (int i = 0; i < len / 2; i ++) {
char t = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = t;
}
}
void count(int n, int* cnt)
{
tos(n);
int len = strlen(s);
for (int num = 0; num < 10; num ++) {
for (int idx = 0; idx < len; idx ++) {
int left, right;
left = n / d[len - idx];
right = n % d[len - idx - 1];
if (num == 0) left -= 1;
cnt[num] += left * d[len - idx - 1];
if (s[idx] - '0' == num) cnt[num] += right + 1;
if (s[idx] - '0' > num) cnt[num] += d[len - idx - 1];
}
}
}
int main()
{
int base = 1;
for (int i = 0; i <= 10; i ++) {
d[i] = base;
base *= 10;
}
int a, b;
while (1) {
scanf("%d %d", &a, &b);
if (a == 0 && b == 0) break;
if (a > b) {
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
for (int i = 0; i < 10; i ++) cnt1[i] = cnt2[i] = 0;
count(a - 1, cnt1);
count(b, cnt2);
for (int i = 0; i < 10; i ++) {
cout << cnt2[i] - cnt1[i];
if (i == 9) cout << endl;
else cout << " ";
}
}
return 0;
}