链接:http://poj.org/problem?id=3070
一道很经典的快速幂入门题,本来不想写到博客上来的,可这几天刚好学习面向对象就换种方式从写了一下,所以就贴上来供自己以后看。感觉自己代码姿势不太正确,我先看看,以后改改。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
class matrix
{
public:
matrix()
{
arr[0][0] = 1;
arr[0][1] = 1;
arr[1][0] = 1;
arr[1][1] = 0;
}
void qingling()
{
memset(arr,0,sizeof(arr));
}
matrix qw(int b);
friend matrix operator*(matrix &a , matrix &b);
int arr[2][2];
};
matrix operator*(matrix &a , matrix &b)
{
matrix ans;
ans.qingling();
int i,j,k;
for(i=0; i<2; i++)
for(j=0; j<2; j++)
for(k=0; k<2; k++)
ans.arr[i][j] = (ans.arr[i][j] + (a.arr[i][k]*b.arr[k][j])%10000)%10000;
return ans;
}
matrix matrix::qw(int b)
{
matrix ans , num;
ans.arr[0][1] = 0;
ans.arr[1][0] = 0;
ans.arr[1][1] = 1;
while(b > 0)
{
if(b&1)
ans = ans*num;
num = num*num;
b /=2;
}
return ans;
}
int main()
{
int n;
while(cin>>n && n!= -1)
{
matrix num;
cout<<num.qw(n).arr[0][1]<<endl;
}
return 0;
}