1049 Counting Ones(30 分)
The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal form of the integers from 1 to N. For example, given N being 12, there are five 1's in 1, 10, 11, and 12.
Input Specification:
Each input file contains one test case which gives the positive N (≤230).
Output Specification:
For each test case, print the number of 1's in one line.
Sample Input:
12
Sample Output:
5
统计前N个整数(十进制)中“1”的个数,找规律吧,我是分别统计每一位上“1”出现的次数,加起来就好了。
#include<stdio.h>
#include<sstream>
#include<string>
using namespace std;
int string2int(string s){
if(s.length()==0)
return 0;
int i;
stringstream stream(s);
stream >> i;
return i;
}
int main(){
char n[15];
scanf("%s",n);
int count=0;
string st(n);
for(int i=0;i<st.size();i++){
int k=i+1;
int bit=st[st.size()-k]-'0';
int pre=string2int(st.substr(0,st.size()-k));
int post=string2int(st.substr(st.size()-k+1));
if(bit==0){
int j=k-1;int tmp=pre;
while(j--)
tmp*=10;
count+=tmp;
}else if(bit==1){
count+=post+1;
int j=k-1;int tmp=pre;
while(j--)
tmp*=10;
count+=tmp;
}else if(bit>1){
int j=k-1;int tmp=pre+1;
while(j--)
tmp*=10;
count+=tmp;
}
}
printf("%d",count);
return 0;
}