1-n之间数字7出现个数

来源:百度知道 编辑:UC知道 时间:2024/05/17 16:51:06
题目描述

统计从1到n的出现的所有整数中,有多少个7。例如:1-8有1个7,1-18有两个7(7,17中有两个),1-28有三个7(7,17,27),1-77有16个7(7,17.。67,70,71,71,。。77总共16个7)。现在希望你统计1到任意整数数字7出现的个数。

输入

输出一个正整数n,表示需要统计1-n中数字7出现的个数,输入以0结束

输出

每输入一个数,输出1-n中7出现个个数,每个输出占一行。

样例输入

1
7
16
17
28
77
100
0

样例输出

0
1
1
2
3
16
20

我讲讲实现算法吧,首先主程序的循环输入输出很简单:
main(){
输入n
while(输入的数n不为0)
{
int count=CountSeven(n)//计算1到n的所有数字含几个7
输出count
输入n
}

再来是CountSeven方法的实现:
int CounSeven(int n)
{
int s=0
for(int i=1;i<=n;i++)
{
s+=Count(i);
}
return s;
}
其中Count(i)方法是统计数字i含有几个7:
int Count(int i)
{
int s=0,a=i;
while(a/10!=0)
{
if(a%10==7)s++;
a=a/10;
}
if(a==7)s++;
return s;
}

目测其它算法都是O(nlgn)复杂度,我提供个O(lgn)的。要快得多哦
#include <iostream>
using namespace std;
int countm(int max,const int &n)
{
int total=0,num=0,a=1,b=0,c=0;
while(max>0){
num=num*10+a/10;
b=a*c/10+b;
c=max%10;
max/=10;
if(c>n&&n) total+=a+c*num;
else if(!n&&c>n) total+=c*num;
else if(c==n) total+=c*num+b+1;
else total+=c*num;
a*=10;

JAVA,C++:求数字1至10之间可能出现的5个数的所有组合? 求用1,2,3,4,5五个数字组成的n位数个数,但要求4出现的次数与5出现的次数之和为奇数。 输出1-100之间,7的整数倍数或数字尾数为7的数字,统计出这些数字个数,不正确做出提示!用while语句做` c语言设计1到23之间随机出现7个数,谢谢高手请进,学生课程设计 1—100之间数字1共出现多少次? 从1-10000,这10000个数中,数字9,一共出现了多少次? 请帮我做一道数学题:在二分之一和一之间插入n个数,使这n个数彼此间等距离,求这n个数 设n为正整数,在1与n+1之间插入n个正数,使这n+2个数成等比数列,则所插入的n个正数之积等于多少? 统计整数中出现的不同数字的个数 谁知道“从键盘输入一个数字N,然后输出1——N之间数字的全排列”代码怎么写?要求用VC++语言