题目:输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数。 例如输入12,从1 到12 这些整数中包含1 的数字有1,10,11 和12,1 一共出现了5 次。 分析:这是一道广为流传的google 面试题。
采用的方法是把整数转化为字符,然后统计‘1’的个数
#include <iostream>
using namespace std;
int findx(int num)
{
char string[1000];
int i,tmp,k,t;
k = 0;
t =0;
int count[1000];
count[k] =0;
static int m = 0;
for(i = 1 ;i<=num ;i++)
{ tmp = i;
if(tmp/10 ==0)
{
m++;
}
if((tmp/10)!=0)
{
m++;
}
while((tmp/10)!=0)
{
m++;
tmp = tmp/10;
}
k++;
count[k]=m;
itoa(i , &string[count[k-1]],10);
}
for(i = 0 ;i<1000 ; i++)
{
if(string[i] == '1')
{
t++;
}
}
cout<<t<<endl;
return t;
}
void main()
{
int num = 20;
int len = findx(num);
cout<<len<<endl;
}