c/C++ 统计在从1到n的正整数中1出现的次数 且输出f(n)=n的n

//哪位能给代码详细注释下,多谢。
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
using namespace std;
int f(int n);//统计在从1到n的正整数中1出现的次数,比如f(13)等于1,到13这些数字中,1总共出现的次数6(1、10、11、12、13共6个1)

int count1(int n);//统计一个数字n包含1的个数,比如count1(123)返回1,count1 (112)返回2.
int cal(unsigned int number,int nwei,int count1,unsigned int ncount);//主要是这个函数看不懂,求解释。
int gTable[10];
const unsigned int gMAX = 400000000L;
int main(int argc, char * argv[])
{
int i ;
unsigned int n = 1;
unsigned int ncount = 0;
int nwei = 0;
int ncount1;
n = atoi(argv[1]);
ncount = f(n);
printf("f(%d) = %d\n",n,ncount);
for(i = 0;i<10;++i)
{
n*=10;
gTable[i] = f(n-1);
}
n=0;
nwei = 0;
ncount1 = 0;
while(n<gMAX)
{
unsigned int temp;
temp = 1;
ncount = cal(n,nwei,ncount1,ncount);
for(i = 0;i<nwei;++i)
temp *= 10;
n+=temp;
if((n/temp)/10 == 1)
++nwei;
ncount1 = count1(n);
}
return 0;
}
int cal(unsigned int number, int nwei,int count1,unsigned int ncount)函数参见http://zhidao.baidu.com/question/454564983160571725.html?quesup2&oldq=1

#include <stdio.h>
int f(int n)//是判断这个数中含几个1
{
 int i,count=0;
 while(n!=0)
 {
  if(n%10==1)
   count++;
  n=n/10;
 }
 return count;//将这个数中含几个1传回
}
int main ()
{
 int n,i,j=0;
 printf("请输入n:");//输入要求的n的值
 scanf("%d",&n);
 for(i=1;i<=n;i++)//循环求1~n中每个数出现1的个数然后进行统计
  j+=f(i);//统计每个数字含的1的个数
 printf("从1~%d,1出现的次数为%d!\n",n,j);//最后进行输出
 return ;
}

追问

int cal(unsigned int number,int nwei,int count1,unsigned int ncount);//主要是这个函数看不懂,求解释

追答

我也看不懂,我这个是用C语言写的!输出f(n)=n的n,这个在j+=f(i)下面价格判断if(j==n)printf("%d\n",i);

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜