题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题) 例如 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。 分析

来源:互联网 发布:勇敢的心 手游 知乎 编辑:程序博客网 时间:2024/06/10 00:50
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题)


例如  输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。

分析:这是一道广为流传的google面试题


一开始我用最开始的思路设计了一个程序,但是这是一个输入的数是有范围限制的一个程序 并不是很完善:


#include<stdio.h>


int main()
{
int a,i=0;
printf("qing shu ru yi ge shu:\n");
scanf("%d",&a);
for(;a>0;a--)
{
if(a%100000/10000==1)
{
i++;
}
if(a%1000/1000==1)
{
i++;
}
if(a%1000/100==1)
{
i++;
}
if(a%1000%100/10==1)
{
i++;
}
if(a%1000%100%10==1)
{
i++;
}
}
printf("%d\n",i);
return 0;
}



完善后的程序输入的数便没有输入范围限制了(通过一个while循环就可以实现):


#include <stdio.h>


#define N 1


int statisticsOneNumber (int i);


int main()
{
int NumInput;
int Count = 0;
int i;


printf("请输入一个整数:\n");
scanf("%d", &NumInput);


for (i = 0; i <= NumInput; i++)
{
Count = Count + statisticsOneNumber(i);
}


printf("%d 一共出现了 %d 次\n", N, Count);


    return 0;
}


/*
 * 函数的作用是统计单个数中 N 出现的次数,返回次数 
 */


int statisticsOneNumber (int i)
{
int Count = 0;


while (i > 0)
{
if (i % 10 == N)
{
Count = Count + 1;
}
i = i / 10;
}


return Count;
}

0 0
原创粉丝点击