“大整數階乖”問題的遞推演算法
/*
標題:<<系統設計師>>應試程式設計例項-[遞推演算法程式設計]
作者:成曉旭
時間:2002年09月11日(11:52:00-16:26:00)
實現遞推演算法的大整數階乖處理函式
時間:2002年09月16日(18:38:00-20:02:00)
實現“斐波那契數列”問題的遞推演算法函式
*/
#include "stdio.h"
#include "stdlib.h"
//:============================“大整數階乖”問題的遞推演算法===========================
#define MAXN 1000 //最大資料位數
//用遞推法求取整數k的階乖,將結果放入陣列array中
void pnext(int array[],int k)
{
int *temp; //動態陣列[臨時儲存運算大整數]
int i,j,num_len = array[0],carry,t; //迴圈變數,長整數位數,進位標誌,臨時變數
if(array[0] >= MAXN)
{
printf("資料處理位數超過程式設計上限,程式將自動中斷執行! ");
exit(1);
}
temp = (int *)malloc(sizeof(int) * (num_len + 1)); //建立動態陣列
for(i=1;i<=num_len;i++)
temp[i] = array[i]; //儲存原始資料
for(j=1;j<k;j++)
{
for(carry = 0,i=1;i<=num_len;i++)
{
if(i <= array[0])
t = array[i] + temp[i] + carry;
else
t = array[i] + carry; //處理最高位
//資料位調整
array[i] = t % 10;
carry = t / 10;
}
if(carry)
array[++num_len] = carry; //在最高位記錄進位標誌
}
free(temp);
array[0] = num_len;
}
//顯示階乖結果
void Show_Result(int array[],int base_number)
{
int i;
printf("%4d!=",base_number);
for(i=array[0];i>0;i--)
printf("%d",array[i]);
printf(" ");
}
//計算資料的階乖
void Count_Result(int array[], int base_number)
{
int k;
array[0] = 1;
array[1] = 1;
for(k=2;k<=base_number;k++)
{
pnext(array,k);
Show_Result(array,k);
}
}
//:============================“大整數階乖”問題的遞推演算法===========================
//:============================“斐波那契數列”問題的遞推演算法===========================
/*
問題描述:
標準斐波那契數列:
F(0) = 0,F(1) = 1,Fn) = F(n-2) + F(n-1)(當n > 1時)
廣義斐波那契數列:
F(0) = 0,F(1) = 0,F(2) = 1,Fn) = F(n-3) + F(n-2) + F(n-1)(當n > 2時)
*/
//標準斐波那契數列的遞推演算法函式
int Std_Fibonacci(int number)
{
int f0 = 0,f1 = 1,result,loop; //初始值1,2,返回結果,迴圈計數器
if(number == 0) return(0);
if(number == 1) return(1);
for(loop = 2;loop <= number;loop ++)
{
result = f0 + f1; //由前兩步的結果計算當前結果--->“推出”
f0 = f1; //把原來的前一步當作下一次的前兩步--->“傳遞”
f1 = result; //把當前結果當作下一次的前一步--->“傳遞”
}//注意:在進行這種向前傳遞的操作時,特別小心傳遞的時序
return(result);
}
//廣義斐波那契數列的遞推演算法函式
int Ext_Fibonacci(int number)
{
int f0 = 0,f1 = 0,f2 = 1,result,loop; //初始值1,2,3,返回結果,迴圈計數器
if(number == 0 || number == 1) return(0);
if(number == 2) return(1);
for(loop = 2;loop <= number;loop ++)
{
result = f0 + f1 + f2; //由前三步的結果計算當前結果
f0 = f1;
f1 = f2;
f2 = result;
}//注意:在進行這種向前傳遞的操作時,特別小心傳遞的時序[即:變數間賦值的前後關係及先後順序]
return(result);
}
void Run_Fibonacci()
{
int large,result;
while(large!=9910)
{
printf(" 請輸入斐波那契數列的元素個數[Enter '9910' to Exit]: ");
scanf("%d",&large);
if(large!=9910)
{
//result = Std_Fibonacci(large);
result = Ext_Fibonacci(large-1);
printf("斐波那契資料中的第[%d] = %d ",large,result);
}
}
}
//:============================“斐波那契數列”問題的遞推演算法===========================
int main(int argc, char* argv[])
{
/*
int LargeArray[MAXN],large = 0;
while(large!=9910)
{
printf("請輸入需要求取其階乖的整數[Enter '9910' to Exit]: ");
scanf("%d",&large);
if(large!=9910)
Count_Result(LargeArray,large);
}
*/
Run_Fibonacci();
printf(" 應用程式執行結束! ");
return 0;
}
標題:<<系統設計師>>應試程式設計例項-[遞推演算法程式設計]
作者:成曉旭
時間:2002年09月11日(11:52:00-16:26:00)
實現遞推演算法的大整數階乖處理函式
時間:2002年09月16日(18:38:00-20:02:00)
實現“斐波那契數列”問題的遞推演算法函式
*/
#include "stdio.h"
#include "stdlib.h"
//:============================“大整數階乖”問題的遞推演算法===========================
#define MAXN 1000 //最大資料位數
//用遞推法求取整數k的階乖,將結果放入陣列array中
void pnext(int array[],int k)
{
int *temp; //動態陣列[臨時儲存運算大整數]
int i,j,num_len = array[0],carry,t; //迴圈變數,長整數位數,進位標誌,臨時變數
if(array[0] >= MAXN)
{
printf("資料處理位數超過程式設計上限,程式將自動中斷執行! ");
exit(1);
}
temp = (int *)malloc(sizeof(int) * (num_len + 1)); //建立動態陣列
for(i=1;i<=num_len;i++)
temp[i] = array[i]; //儲存原始資料
for(j=1;j<k;j++)
{
for(carry = 0,i=1;i<=num_len;i++)
{
if(i <= array[0])
t = array[i] + temp[i] + carry;
else
t = array[i] + carry; //處理最高位
//資料位調整
array[i] = t % 10;
carry = t / 10;
}
if(carry)
array[++num_len] = carry; //在最高位記錄進位標誌
}
free(temp);
array[0] = num_len;
}
//顯示階乖結果
void Show_Result(int array[],int base_number)
{
int i;
printf("%4d!=",base_number);
for(i=array[0];i>0;i--)
printf("%d",array[i]);
printf(" ");
}
//計算資料的階乖
void Count_Result(int array[], int base_number)
{
int k;
array[0] = 1;
array[1] = 1;
for(k=2;k<=base_number;k++)
{
pnext(array,k);
Show_Result(array,k);
}
}
//:============================“大整數階乖”問題的遞推演算法===========================
//:============================“斐波那契數列”問題的遞推演算法===========================
/*
問題描述:
標準斐波那契數列:
F(0) = 0,F(1) = 1,Fn) = F(n-2) + F(n-1)(當n > 1時)
廣義斐波那契數列:
F(0) = 0,F(1) = 0,F(2) = 1,Fn) = F(n-3) + F(n-2) + F(n-1)(當n > 2時)
*/
//標準斐波那契數列的遞推演算法函式
int Std_Fibonacci(int number)
{
int f0 = 0,f1 = 1,result,loop; //初始值1,2,返回結果,迴圈計數器
if(number == 0) return(0);
if(number == 1) return(1);
for(loop = 2;loop <= number;loop ++)
{
result = f0 + f1; //由前兩步的結果計算當前結果--->“推出”
f0 = f1; //把原來的前一步當作下一次的前兩步--->“傳遞”
f1 = result; //把當前結果當作下一次的前一步--->“傳遞”
}//注意:在進行這種向前傳遞的操作時,特別小心傳遞的時序
return(result);
}
//廣義斐波那契數列的遞推演算法函式
int Ext_Fibonacci(int number)
{
int f0 = 0,f1 = 0,f2 = 1,result,loop; //初始值1,2,3,返回結果,迴圈計數器
if(number == 0 || number == 1) return(0);
if(number == 2) return(1);
for(loop = 2;loop <= number;loop ++)
{
result = f0 + f1 + f2; //由前三步的結果計算當前結果
f0 = f1;
f1 = f2;
f2 = result;
}//注意:在進行這種向前傳遞的操作時,特別小心傳遞的時序[即:變數間賦值的前後關係及先後順序]
return(result);
}
void Run_Fibonacci()
{
int large,result;
while(large!=9910)
{
printf(" 請輸入斐波那契數列的元素個數[Enter '9910' to Exit]: ");
scanf("%d",&large);
if(large!=9910)
{
//result = Std_Fibonacci(large);
result = Ext_Fibonacci(large-1);
printf("斐波那契資料中的第[%d] = %d ",large,result);
}
}
}
//:============================“斐波那契數列”問題的遞推演算法===========================
int main(int argc, char* argv[])
{
/*
int LargeArray[MAXN],large = 0;
while(large!=9910)
{
printf("請輸入需要求取其階乖的整數[Enter '9910' to Exit]: ");
scanf("%d",&large);
if(large!=9910)
Count_Result(LargeArray,large);
}
*/
Run_Fibonacci();
printf(" 應用程式執行結束! ");
return 0;
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935912
相關文章
- “斐波那契數列”問題的遞推演算法演算法
- 遞迴演算法程式設計整數因子分解問題的遞迴演算法遞迴演算法程式設計
- 遞推演算法,AI衍生演算法AI
- c++ 遞推演算法C++演算法
- 遞推演算法與遞推套路(手撕演算法篇)演算法
- 遞推演算法與遞推套路(演算法基礎篇)演算法
- 資料結構與演算法——兩個大整數的乘積問題資料結構演算法
- 求救。我編的一個整數階乘的程式出問題了。急!
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- YbtOJ 遞推演算法課堂過關 例5 平鋪方案【遞推(簡單DP)】演算法
- 微課|中學生可以這樣學Python(8.3節):遞推演算法例題講解Python演算法
- 大整數操作
- Nginx 高階篇(七)大訪問量優化的整體思路Nginx優化
- 模擬退火演算法Python程式設計(3)整數規劃問題演算法Python程式設計
- 整數劃分問題(動態規劃)動態規劃
- 質數填表問題的回溯演算法演算法
- Python進階-演算法-遞迴Python演算法遞迴
- 分治演算法-眾數問題演算法
- 請教一個JSF引數傳遞的問題JS
- PHP操作MongoDB時的整數問題及對策UQPHPMongoDB
- 請教一個Python中長整數的問題Python
- C++大隨機數的問題C++隨機
- 二維陣列作為引數傳遞問題陣列
- rake 任務引數傳遞問題解決
- 遞迴中的遞推與迴歸以及返回值和函式儲存的問題(以階乘問題進行討論)遞迴函式
- 每天一道演算法題:顛倒整數演算法
- c++迷宮問題回溯法遞迴演算法C++遞迴演算法
- 用遞迴的方法列印出輸入的任意整數遞迴
- 樹遞迴問題的求解遞迴
- 爬臺階問題(遞迴和動態規劃實現)遞迴動態規劃
- 【演算法詳解】求解數值的整數次方演算法
- 請教一個在Tiles中引數傳遞的問題
- 解決latch free問題的資料庫引數調整資料庫
- 一個vuepress配置問題,引發的js遞迴演算法思考VueJS遞迴演算法
- 分頁及查詢引數傳遞問題分享
- FCC - 253 計算一個整數的階乘
- 演算法用連結串列模擬大整數加法運算演算法
- 面試每日一題:怎麼推演肯德基上校的勝率曲線?(數值向)面試每日一題