Fancy Mouse
- -|||
这题略带一些技巧。注意有5因子的数的处理。可以发现乘一个5与乘一个8的效果相同。于是我们对于每一个含有5因子的数在乘的时候做一下处理即可~
#include<iostream>
using namespace std;

const int N = 101;
const int a[10= {1,1,2,6,4,4,4,8,4,6};
int Positive(int n[N]);
void DivideFive(int n[N]);
int main()
{
    
int n[N],pos,result,bit;
    
char s[N],*p;
    
while(cin>>s)
    
{
        
for(p=s;*p!='\0';p++);
        
for(pos=0;p>s;pos++) n[pos] = *--- '0';
        
for(;pos<N;pos++) n[pos] = 0;
        
for(result=1,bit=0;Positive(n);bit++,DivideFive(n))
            result 
= (result * a[n[0]] * (1 << ( (n[0]%5 * 3 * (bit%4)) % 4))) % 10;
        cout
<<result<<endl;
    }

    
return 0;
}

int Positive(int n[N])
{
    
for(int i=N-1;i>=0;i--)
        
if(n[i]) return 1;
    
return 0;
}

void DivideFive(int n[N])
{
    
int m[N];
    
int mem = 0,pos = N-1;
    
for(;pos>=0;pos--)
    
{
        mem 
= mem*10 + n[pos];
        m[pos] 
= mem/5;
        mem 
%= 5;
    }

    
for(pos=0;pos<N;pos++)
        n[pos] 
= m[pos];
}
posted on 2005-10-22 02:09  Fancy Mouse  阅读(314)  评论(1编辑  收藏  举报