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;
    }



  • 相关阅读:
    时间日期总览
    Mysql一次更新多条数据
    windows远程桌面连接无法粘贴
    vmware workstation pro密钥
    C#自动生成XML文件
    Mysql 缺少MSVCR120DLL问题
    hdu 5672 Strings 模拟
    poj 1328 雷达覆盖 贪心
    hdu 5667 Sequence (矩阵快速幂)
    CodeForces 652D Nested Segments 树状数组
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7603962.html
Copyright © 2011-2022 走看看