枚举m的最后一位,找到规律就很容易做了。这道题的数据不是很强,m、n都没有前导0,不然的话就得用高精度了。
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string n,m;
int main()
{
freopen("in.txt","r",stdin);
while(cin>>m>>n)
{
if(n[0]=='0'&&m[0]=='0') break;
if(n[0]=='0')
{
cout<<1<<endl;
continue;
}
m='0'+m;n='0'+n;
int lm=m.size(),ln=n.size();
if(m[lm-1]=='0') cout<<0<<endl;
else if(m[lm-1]=='1') cout<<1<<endl;
else if(m[lm-1]=='2')
{
int tmp=(n[ln-2]-'0')*10+(n[ln-1]-'0');
if(tmp%4==0) cout<<6<<endl;
else if(tmp%4==1) cout<<2<<endl;
else if(tmp%4==2) cout<<4<<endl;
else cout<<8<<endl;
}
else if(m[lm-1]=='3')
{
int tmp=(n[ln-2]-'0')*10+(n[ln-1]-'0');
if(tmp%4==0) cout<<1<<endl;
else if(tmp%4==1) cout<<3<<endl;
else if(tmp%4==2) cout<<9<<endl;
else cout<<7<<endl;
}
else if(m[lm-1]=='4')
{
if((n[ln-1]-'0')%2==0) cout<<6<<endl;
else cout<<4<<endl;
}
else if(m[lm-1]=='5') cout<<5<<endl;
else if(m[lm-1]=='6') cout<<6<<endl;
else if(m[lm-1]=='7')
{
int tmp=(n[ln-2]-'0')*10+(n[ln-1]-'0');
if(tmp%4==0) cout<<1<<endl;
else if(tmp%4==1) cout<<7<<endl;
else if(tmp%4==2) cout<<9<<endl;
else cout<<3<<endl;
}
else if(m[lm-1]=='8')
{
int tmp=(n[ln-2]-'0')*10+(n[ln-1]-'0');
if(tmp%4==0) cout<<6<<endl;
else if(tmp%4==1) cout<<8<<endl;
else if(tmp%4==2) cout<<4<<endl;
else cout<<2<<endl;
}
else if(m[lm-1]=='9')
{
if((n[ln-1]-'0')%2==0) cout<<1<<endl;
else cout<<9<<endl;
}
}
return 0;
}