http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11566&courseid=0
輸入n,求出第n個fib數的stable value(每次把一個數所有位數相加,直到變成個位輸出)
題目說明任何數都可以在有限步數內完成目標.
思路:學弟推出的f[n]最終的值是f[n]對9取模,那麼 既然對9取模就一定會出現週期,算出週期為24。
首先預處理出1個週期內的所有數,然後每次輸入輸出對應的數即可.
1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #define maxn 100 5 #define ll long long 6 using namespace std; 7 short a[105]; 8 void Fcci() //預處理出 a 9 { 10 a[0]=9; 11 a[1]=1;a[2]=1; 12 for(int i=3;i<=maxn;i++) 13 a[i]=(a[i-1]+a[i-2])/10+(a[i-1]+a[i-2])%10; 14 } 15 int main() 16 { 17 //freopen("a.txt","w",stdout); 18 __int64 ff; 19 Fcci(); 20 while(~scanf("%I64d",&ff)) 21 //for(int i=1;i<100;i++) 22 { 23 if(ff==0)break; 24 printf("%d\n",a[ff%24]); 25 } 26 }