HDOJ 1061 Rightmost Digit
找出数学规律
原题:
Rightmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6515 Accepted Submission(s): 2454
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
2 3 4
7 6
讲解:(摘自网上)
对于数字0~9, 它们的N次方,我们只看最后一个数字:
0^1=0; 0^2=0; 循环周期T=1;
1^1=1; 1^2=1; 循环周期T=1;
2^1=2; 2^2=4; 2^3=8; 2^4=6 2^5=2; 循环周期T=4;
3^1=3; 3^2=9; 3^3=7; 3^4=1;3^5=3; 循环周期T=4;
4^1=4; 4^2=6; 4^3=4; 循环周期T=2;
后面的大家可以自己算,会得出一个规律:
他们的循环周期只有1,2,4这三种,所以对于源代码里的a,我们可以只算a%4次就可以了,大大减少了循环的次数
源代码:
1 #include <iostream> 2 using namespace std; 3 4 int zhou[10]; 5 6 int main() { 7 int N; cin >> N; 8 while (N--) { 9 long long int num; 10 cin >> num; 11 int a = num % 10; 12 int b = (a * a) % 10; 13 int c = (b * a) % 10; 14 int d = (c * a) % 10; 15 int m = num % 4; 16 switch(m) { 17 case 0: cout << d << endl; break; 18 case 1: cout << a << endl; break; 19 case 2: cout << b << endl; break; 20 case 3: cout << c << endl; break; 21 } 22 } 23 return 0; 24 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。