HDU 1060 1061求 n^n 最左边 最右边的数字

来源:互联网 发布:oracle 数据导入导出 编辑:程序博客网 时间:2024/06/04 17:53

求最左边用log

m=n^n 

log10(m)=nlog10(n)

m=10^(nlog10(n))

10的整数幂第一位是1,那么第一位的数字由小数部分决定

代码如下

#include<stdio.h>#include<math.h>int main(){    int t;    scanf("%d",&t);    while(t--)    {      __int64 n,b;      double a,c;      int d;      scanf("%I64d",&n);      a=n*log10(n);      b=(__int64)a;      c=a-b;      d=pow(10,c);      printf("%d\n",d);    }    return 0;}            


 

 

求最右边的数字  整数快速幂 每次%10就ok了

#include<stdio.h>int main(){   int t;   scanf("%d",&t);   while(t--)   {      int n;      scanf("%d",&n);      int res=1;      int x=n;      for(;x;x>>=1)      {        if(x&1)        res=(res*(n%10))%10;        n=((n%10)*(n%10))%10;      }      printf("%d\n",res);   }   return 0;}