“大整数阶乖”问题的递推算法

news/2024/7/7 15:18:24
/*
    标题:< <系统设计师> >应试编程实例-[递推算法程序设计]
    作者:成晓旭
    时间: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;
}






http://www.niftyadmin.cn/n/3649119.html

相关文章

RecycleView的详细介绍

一、RecycleView的简介 RecyclerView是一种新的视图组&#xff0c;目标是为任何基于适配器的视图提供相 似的渲染方式。该控件用于在有限的窗口中展示大量数据集&#xff0c;它被作为ListView和GridView控件的继承者。 那么有了ListView、GridView为什么还需要RecyclerView这…

[人物]USTC十大IT精英

【科大精英】张亚勤 微软全球副总裁1999年加盟微软亚洲研究院(原微软中国研究院)&#xff0c;现任微软亚洲研究院院长兼首席科学家。张博士1966年出生于山西太原&#xff0c;12岁考入中国科技大学少年班&#xff0c;23岁获得美国乔治华盛顿大学电气工程博士学位(1989)&#xff…

CardView的简单使用

一、CardView的简介 CardView继承自FrameLayout类&#xff0c;可以在一个卡片布局中一致性的显示内容&#xff0c;卡片可以包含圆角和阴影&#xff0c;这是CardView的最大的卖点。CardView是一个Layout&#xff0c;可以布局其他View。 CardView常用属性&#xff1a; card_view…

JAMstack:什么,为什么以及如何

介绍 (Introduction) Web development often involves the use of different development stacks, including the LAMP stack, the MEAN stack, the MERN stack, etc. JAMstack is another stack that offers some unique benefits to developers. This article will discuss t…

joi 参数验证_使用Joi进行节点API架构验证

joi 参数验证介绍 (Introduction) Imagine you are working on an API endpoint to create a new user, and some user data such as firstname, lastname, age and birthdate will need to be included in the request. Passing Sally in as value for age, or 53 for birthda…

利用Path实现酷炫的启动界面

参考GitHub源码的位置https://github.com/geftimov/android-pathview 首先第一步写布局 <com.eftimoff.androipathview.PathViewxmlns:app"http://schemas.android.com/apk/res-auto"android:id"id/pathView"android:layout_width"150dp"and…

drawable文件夹详解

QVGA使用ldpi&#xff0c;虽然有不同尺寸&#xff0c;但都是120dpi左右&#xff1b;HVGA同理&#xff1b;如下图&#xff1b; -finger 用于触摸屏的设备 -hdpi 近似于240dpi的高级显示密度的屏幕 -mdpi 近似于160dpi的中级显示密度的屏幕 -ldpi 近似于120dpi的低级…

Android创建桌面快捷方式几种方法

Java代码 Android在桌面上生成快捷方式有两种情况&#xff0c;一种是直接在桌面直接生成;一种是长按桌面&#xff0c;在弹出的快捷菜单中生成。 第一个是通过广播(Broadcast)的形式向Luncher发送请求生成快捷方式的。在网上找到关于这方面的注册信息。 <!-- …