题目描述
给定一个任意大小的非负整数N,求出1~N的整数中1出现的次数
例如1~13中1出现了6次(1,10,11,12,13)。
输入描述
一共有T组测试数据。
第一行输入一个T,代表T组测试数据。
接来下为T行,每行输入一个整数N,1<N<=100000000。
输出描述
输出为T行,每行对于对应的N,输出1到N中1出现的总个数。
输入样例
2 13 20
输出样例
6 12
AC代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int count2(int n)
{
int count = 0;
int factor = 1;
int lower = 0;
int higher = 0;
int curr =0;
while(n/factor != 0)
{
lower = n - n/factor*factor;
curr = (n/factor)%10;
higher = n/(factor*10);
switch(curr)
{
case 0:
count += higher * factor;
break;
case 1:
count += higher * factor + lower + 1;
break;
default:
count += (higher+1)*factor;
}
factor *= 10;
}
return count;
}
int main(int argc, char** argv) {
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int ans=count2(n);
cout<<ans<<endl;
}
return 0;
}