zoukankan      html  css  js  c++  java
  • 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;
    }



  • 相关阅读:
    https://blog.csdn.net/nameofcsdn/article/details/53164652
    洛谷
    模板
    模板
    Gym 101911E "Painting the Fence"(线段树区间更新+双端队列)
    Gym 101911F “Tickets”
    图论:最小瓶颈生成树
    图论:次小生成树
    图论:费用流-SPFA+EK
    图论:Dinic算法
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7603962.html
Copyright © 2011-2022 走看看