• zoj2277 The Gate to Freedom



                                                            传送门

    题目大意,对n,                求n^n的最左边一位数的大小;
    如                                         f(3)=27,ans=27/10=2;
                                                f(4)=256,ans=256/10/10=2;
                                                ······
    普遍地,对于                      f(x),ans=f(x)/(10^k);10^k<=f(x),当k最大时得到答案;
    所以取对数                         log10(f(x))=k+log10(f(x)%(10^k)),k为整数,log(···)为零头,再用pow(10,log(···))得到anwser。

    ——————————————————— 分歌线———————————————————————————

    这道题如果用while(sacnf(····))就超市了,
    而用while(~scanf(····))只要20ms(mmgp)。。。

    可以经常在ACM代码中看到 while(~scanf("%d",&n)){ } 这样的代码,意思是在读到输入结尾时循环也结束。

    一般在读到输入流结尾时,scanf返回的是EOF。

    EOF是在头文件stdio中定义的常量,一般为-1。

    -1 的原码是10000001,反码是1111110,补码是11111111。复习一下,正数的原码、反码、补码都是一样的;负数的原码是符号位为1,反码是(对原码)符号位不变、其余位取反,补码是(对原码)符号位不变、其余位取反、末位加1.

    ~EOF则是对EOF进行按位取反操作,则为00000000。所以while条件不满足,循环结束。

    #include<cstdio>
    #include<cstdlib>
    #include<math.h>
    #include<iostream>
    using namespace std;
    int main()
    {
    	int  n;
    	while(~scanf("%d",&n)){
    		 double t=(double)n*log10(n);
    		 t=t-int(t);
    		 t=pow(10,t);
    		printf("%d
    ",(int)t);
    	}
    	return 0;
    }



  • 相关阅读:
    高性能MySQL学习总结二----常见数据类型选择及优化
    springboot admin图文+视频教程
    xxl-job图文教程+视频讲解
    mybatis-plus视频教程
    springcloud视频教程
    springcloud系统化学习图文+视频教程
    docker系统化学习图文+视频教程
    【分享】docker全套视频教程
    是用Git还是SVN?
    NOIP知识点汇总
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7603962.html
Copyright © 2020-2023  润新知