zoukankan      html  css  js  c++  java
  • 高精度处理斐波那契序列(C语言)

      1 #include<stdio.h>
      2 #include<string.h>
      3 //memset,strcpy,strlen函数头文件 
      4 int main(void)
      5 {
      6 char sum[1000000];//用来保存产生的下一个斐波那契数,当然了,是字符串形式 
      7 long long m,i,max,s = 0;//max用来存放数位较长的个数 
      8 char s1[100000],s2[100000]; //用来存储斐波那契数列的相邻两个数,并以字符串形式进行存储 
      9 int a[100000],b[100000];//转存到int数组中 
     10 long long n;
     11 scanf("%lld",&n);//输入你想要输出的菲波那切数列的第多少位 
     12 
     13 strcpy(s1,"1"); //初始第一项为"1"; 
     14 strcpy(s2,"1");//初始第二项为"1";
     15 
     16 for(m=2;m<n;m++)//大循环 
     17 {
     18 //每一次都需要将a,b数组所有字节置0 
     19 memset(a,0,sizeof(int)*5000);
     20 memset(b,0,sizeof(int)*5000);
     21 
     22 //a[0]用来保存每一次第一个菲波那切数就是s1的长度 ,并将菲波那切数以逆向方式存储到a数组中 
     23 a[0] = strlen(s1);
     24 for(i=1;i<=a[0];i++)
     25 {
     26 a[i] = s1[a[0] - i] - '0';//a[0]-i便是倒序 
     27 }
     28 
     29 //b[0]用来保存每一次第二个菲波那切数就是s2的长度 ,并将菲波那切数以逆向方式存储到b数组中
     30 b[0] = strlen(s2);
     31 for(i=1; i<=b[0]; i++)
     32 {
     33 b[i] = s2[b[0] - i] - '0';//b[0]-i便是倒序 
     34 }
     35 
     36 //max存放数位较大的 
     37 //因为相加是倒序相加,因此需要找到位数长的,并记录个数 
     38 max =( a[0]>b[0]?a[0]:b[0] ); 
     39 
     40 for(i=1;i<=max;i++)
     41 {
     42 //将a[i]和b[i]的值赋给a[i],a[i]可能大于10,或者小于10;
     43 //大于10则要进一位;
     44 //自身变成a[i]%10; 
     45 a[i]+=b[i];//此时a[i]可能大于10 
     46 a[i+1]+=a[i]/10;//无论a[i]是不是大于10,都除以10,发给下一位,也就是所谓的进一位
     47 a[i]%=10;//无论a[i]是不是大于10,求余10,发给a[i] 
     48 }
     49 
     50 //可能进位导致较长位数+1; 
     51 max++;
     52 
     53 //进位导致0的出现 ,出现多余有效数字 
     54 while(a[max] == 0 && max > 1)
     55 {
     56 max--;
     57 } 
     58 
     59 //将获得的新的斐波那契数以字符串形式发送给一个数组,在通过strcpy函数复制给s2, 
     60 for (i = max,s = 0;i>=1;i--,s++)
     61 {
     62 sum[s] = a[i]+'0';//再将数字转化为字符 
     63 } 
     64 
     65 strcpy(s1,s2);//将s2复制给s1 
     66 strcpy(s2,sum);//将sum数组里面的字符串复制给s2 
     67 } 
     68 printf("%s",s2);
     69 return 0;
     70 }
  • 相关阅读:
    选择排序
    unity面试准备
    标识位
    table.insert(tableName, v)
    使用bmfont制作字体
    长按tools Icon 弹出Tips音效
    钓鱼功能
    jQuery鼠标移到小图显示大图效果
    ThinkPHP3.2.3中如何显示二级栏目
    ThinkPHP3.2.2自定义success及error跳转页面
  • 原文地址:https://www.cnblogs.com/zhangqiling/p/11322574.html
Copyright © 2011-2022 走看看