ArcTan

dfs
随笔 - 16, 文章 - 117, 评论 - 6, 引用 - 0
数据加载中……

poj1019(线段树)

http://user.qzone.qq.com/289065406/blog/1301527312
这个题解,挺详细,不错。
注意的就是log()和pow()函数的使用

两个都是重载函数,函数原型分别为

double log(double)

float log(float)

double pow(double , double)

float pow(float ,float)

所以当传参的类型不是double或float时,必须强制转换为其中一种类型,否则编译出错。一般建议用double


#include<stdio.h>
#include
<string.h>
#include
<math.h>

unsigned a[
31269],s[31269];

int init()
{
    
int i;
    a[
1]=s[1]=1;
    
for (i=2; i<31269 ; i++ )
    {
        a[i]
=a[i-1]+(int)log10((double)i)+1;
        s[i]
=s[i-1]+a[i];
    }
    
return 0;
}

int compute(int n)
{
    
int i=1,pos,len;
    
while (s[i]<n)
        i
++;
    pos
=n-s[i-1];
    len
=0;
    
for (i=1; len<pos ; i++ )
        len
+=(int)log10((double)i)+1;
    
return (i-1)/(int)pow((double)10,len-pos)%10;
}

int main()
{
    
int t,n,ans,i;
    init();
    scanf(
"%d",&t);
    
while (t--)
    {
        scanf(
"%d",&n);
        ans
=compute(n);
        printf(
"%d\n",ans);
    } 
    
return 0;
}


posted on 2012-03-24 23:07 wangs 阅读(226) 评论(0)  编辑 收藏 引用 所属分类: ACM-201203


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理