poj 3070

来源:互联网 发布:原唱伴唱切换软件 编辑:程序博客网 时间:2024/05/16 03:58

链接: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;}
0 0