统计数字问题
2017-09-20 10:39
288 查看
题目:
![](https://img-blog.csdn.net/20170920112304166?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVmFsaWVsaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int num;
int a[10]={0};
int f()
{
for(int i=1;i<=num;i++)
{
int t=i;
while(t)
{
a[t%10]++;
t/=10;
}
}
cout<<"页码数目为:"<<num<<endl;
for(int i=0;i<10;i++)
cout<<i<<"\t"<<a[i]<<endl;
}
int main()
{
FILE *fp1=fopen("input.txt","r");
FILE *fp2=fopen("output.txt","w");
char text[10];
while(fgets(text,10,fp1)!=NULL);
num=atoi(text);
cout<<num<<endl;
f();
for(int i=0;i<10;i++)
{
char t[10];
sprintf(t,"%d\t%d\n",i,a[i]);
fputs(t,fp2);
}
fclose(fp1);
fclose(fp2);
}
然而,此算法时间复杂度高。当n=10e9时,将会运行很长时间。因此此算法需要优化。
代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int num;
int a[10]={0};
int f()
{
for(int i=1;i<=num;i++)
{
int t=i;
while(t)
{
a[t%10]++;
t/=10;
}
}
cout<<"页码数目为:"<<num<<endl;
for(int i=0;i<10;i++)
cout<<i<<"\t"<<a[i]<<endl;
}
int main()
{
FILE *fp1=fopen("input.txt","r");
FILE *fp2=fopen("output.txt","w");
char text[10];
while(fgets(text,10,fp1)!=NULL);
num=atoi(text);
cout<<num<<endl;
f();
for(int i=0;i<10;i++)
{
char t[10];
sprintf(t,"%d\t%d\n",i,a[i]);
fputs(t,fp2);
}
fclose(fp1);
fclose(fp2);
}
然而,此算法时间复杂度高。当n=10e9时,将会运行很长时间。因此此算法需要优化。