杭电HDOJ 1061 解题报告
来源:互联网 发布:阿里云域名空间 编辑:程序博客网 时间:2024/05/17 04:58
Rightmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24000 Accepted Submission(s): 9155
Problem Description
Given a positive integer N, you should output the most right digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the rightmost digit of N^N.
Sample Input
234
Sample Output
76HintIn the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
Author
Ignatius.L
解题思路:
方案1、每次取末位相乘。(该方法代码就不贴了,学过c的基本都会写吧,小心超时哦!当然>10应该先只取末位,而且要知道他是有规律的(跟4有关不多说了),代码简单)
方案2、找规律。
方案3、取对数,思路类似1060。
{有一个常规的方法是利用对数
可以令n^n=A*10^L A的范围是(0,1),L是n^n计算出来后的位数
L的计算方法是对n^n取10的对数在取整,即L=[nlgn]
那么n^n=A*10^([nlgn])
这样之后,两边同时对10取对数
得到:nlgn=lgA+[nlgn]
于是乎lgA=nlgn-[nlgn]
A=10^(nlgn-[nlgn])
由于A是(0,1),此时只需计算[A*10]即可。
摘自http://blog.csdn.net/creazierhit/article/details/7787249
}这貌似连样例都过不了,大家也可以试试。有用方案3,AC的可以@我。
代码2:(亮爆你的双眼)
#include<stdio.h>#include<string.h>main(){int n,i,t,s,l,m;char a[12];scanf("%d",&n);getchar();for(i=0;i<n;i++){gets(a);l=strlen(a);t=a[l-1]-48;switch(t){case 1: s=1;break;case 5: s=5;break;case 6: s=6;break;case 0: s=0;break;case 2:if(l>1) m=t+(a[l-2]-48)*10;else m=t;m%=4;switch (m){case 0:s=6;break;case 1:s=2;break;case 2:s=4;break;case 3:s=8;break;}break;case 3:if(l>1) m=t+(a[l-2]-48)*10;else m=t;m%=4;switch (m){case 0:s=1;break;case 1:s=3;break;case 2:s=9;break;case 3:s=7;break;}break;case 4:m=t;m%=2;switch (m){case 0:s=6;break;case 1:s=4;break;}break;case 7:if(l>1) m=t+(a[l-2]-48)*10;else m=t;m%=4;switch (m){case 0:s=1;break;case 1:s=7;break;case 2:s=9;break;case 3:s=3;break;}break;case 8:if(l>1) m=t+(a[l-2]-48)*10;else m=t;m%=4;switch (m){case 0:s=6;break;case 1:s=8;break;case 2:s=4;break;case 3:s=2;break;}break;case 9:m=t;m%=2;switch (m){case 0:s=1;break;case 1:s=9;break;}break;}printf("%d\n",s);}}
- 杭电HDOJ 1061 解题报告
- 杭电HDOJ 2084 解题报告
- 杭电HDOJ 1159 解题报告
- 杭电HDOJ 1000 解题报告
- 杭电HDOJ 1001 解题报告
- 杭电HDOJ 1002 解题报告
- 杭电HDOJ 1003 解题报告
- 杭电HDOJ 1160 解题报告
- 杭电HDOJ 1042 解题报告
- 杭电HDOJ 1040 解题报告
- 杭电HDOJ 1097 解题报告
- 杭电1061 解题报告
- 杭电1008解题报告
- 杭电1014解题报告
- 杭电1160解题报告
- 杭电1176解题报告
- 杭电2059解题报告
- 杭电HDOJ1024 解题报告
- unityios开发--FingerGestures插件使用
- opencv c++函数 highgui模块 3
- VMware 虚拟机硬盘镜像共享
- Black-Scholes期权定价(C#版)
- CSingleLock
- 杭电HDOJ 1061 解题报告
- S2SH3配置错误
- Vmdk文件导入虚拟机VMware8.0教程
- 创建activity要点
- NavigationController导航栏中添加多个UIBarButtonItem
- 常用SQL语句
- SQL 查询去掉字符的方法SUBSTR()、 查询序列号的方法ROW_NUMBER()
- struct hostent结构体
- Ubuntu下安装NetBeans步骤和相关问题的解决方法