POJ3070矩阵求Fibonacci_星语天空_新浪博客
#include<iostream>
using namespace std;
int main()
{
 int n;
 bool fib[100];
 while(cin >> n) {
  if(n == -1) break;
  if(n == 0) {
   cout << 0 << endl;
   continue;
  }
  memset(fib, 0, sizeof(fib));
  int i = 0, j;
  int a = 1, b = 1, c = 1, d = 0;
  int temp_a, temp_b, temp_c, temp_d;
  while(n != 1) {
   if(n % 2 == 0) {
    n /= 2;
    fib[i ++] = 1;             //1记录相除
   }
   else {
    n --;
    fib[i ++] = 0;             //0记录相减
   }
  }
  for(j = i - 1; j >= 0; j --) {
   if(fib[j] == 1) {
    temp_a = (a * a + b * c) % 10000;
    temp_b = (a * b + b * d) % 10000;
    temp_c = (a * c + c * d) % 10000;
    temp_d = (c * b + d * d) % 10000;
    a = temp_a;
    b = temp_b;
    c = temp_c;
    d = temp_d;
   }
   else {
    temp_a = (a + b) % 10000;
    temp_b = a;
    temp_c = (c + d) % 10000;
    temp_d = c;
    a = temp_a;
    b = temp_b;
    c = temp_c;
    d = temp_d;
   }
  }
  cout << b << endl;
 }
 return 0;
}
已投稿到:
郑重声明:资讯 【POJ3070矩阵求Fibonacci_星语天空_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——