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

xiaoxiao2021-02-28  116

题目:输入一个整数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(a0000/10000==1) { i++; } if(a00/1000==1) { i++; } if(a00/100==1) { i++; } if(a000/10==1) { i++; } if(a000==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; }

转载请注明原文地址: https://www.6miu.com/read-41123.html

最新回复(0)