#include <stdio.h>#include <iostream>using namespace std;
int dig[] = {1, 1, 2, 6, 4, 2, 2, 4, 2, 8};
int lastNon0Digit(int n){ if (n < 10) return dig[n];
// Check whether tens (or second last) digit // is odd or even // If n = 375, So n/10 = 37 and (n/10)%10 = 7 // Applying formula for even and odd cases. if (((n/10)%10)%2 == 0) return (6*lastNon0Digit(n/5)*dig[n%10]) % 10; else return (4*lastNon0Digit(n/5)*dig[n%10]) % 10;}
int main(){ int n,m; while(cin>>n){ while(n--){ cin>>m; cout<<lastNon0Digit(m)<<endl; } }
return 0;}
#include #include using namespace std;
int dig[] = {1, 1, 2, 6, 4, 2, 2, 4, 2, 8};
int lastNon0Digit(int n){ if (n < 10) return dig[n];
// Check whether tens (or second last) digit // is odd or even // If n = 375, So n/10 = 37 and (n/10)%10 = 7 // Applying formula for even and odd cases. if (((n/10)%10)%2 == 0) return (6*lastNon0Digit(n/5)*dig[n%10]) % 10; else return (4*lastNon0Digit(n/5)*dig[n%10]) % 10;}
int main(){ int n,m; while(cin>>n){ while(n--){ cin>>m; cout<<lastNon0Digit(m)<<endl; } }
return 0;}
好像要long long
不好意思 想藉文章串討論問一下這個規律是怎麼推導出來的
因為這題和 c055: 00568 - Just the Facts 題目敘述是一樣但問題是測資範圍大了許多
網路上找到的答案有兩種 一種是做質因數分解,先把2和5的因數濾出來相互消去,最後再乘回去
另一種是只說保留最後六位數即可(但原因皆不解釋或只會直呼好神奇....)
顯然上述兩種方法皆無法處理這個問題,所以想問一下這個規律是怎麼推導出來的
先謝謝高手們的回覆