zoukankan      html  css  js  c++  java
  • HDU 1715 大斐波数 加法高精度

    解题报告:求 斐波那契数,不过这题的n的范围是1000,肯定是早就超过了的,所以要用到高精度,所以这题其实就是一个加法高精度的题。

    我的做法 是写一个大数相加的函数,然后打表就是了,这里注意的就是每次做了大数相加之后任然保留倒序的数存在表里面,这样以便下次相加的时候直接加,而不用把顺序翻来翻去很麻烦,这样只要在输出的时候把顺序倒过来就可以 了。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 const int maxn = 1000+4;
     6 char ans[1003][1000];
     7 char* add(const char *s1,const char* s2) {
     8     int len1 = strlen(s1);
     9     int len2 = strlen(s2);
    10     int a1[maxn],a2[maxn];
    11     memset(a1,0,sizeof(a1));
    12     memset(a2,0,sizeof(a2));
    13     for(int i = 0;i<len1;++i)
    14     a1[i] = s1[i]-'0';
    15     for(int i= 0;i<len2;++i)
    16     a2[i] = s2[i]-'0';
    17     int M = max(len1,len2);
    18     for(int i = 0;i<=M;++i) {
    19         a1[i] += a2[i];
    20         a1[i+1] += a1[i]/10;
    21         a1[i] %= 10;
    22     }
    23     if(a1[M] != 0)
    24     M++;
    25     char s3[maxn]; 
    26     for(int i = 0;i<M;++i)
    27     s3[i] = a1[i]+'0';
    28     s3[M] = NULL;
    29     return s3;
    30 }
    31 void dabiao() {
    32     ans[1][0] = ans[2][0] = '1';
    33     ans[1][1] = ans[2][1] = NULL;
    34     for(int i = 3;i<=1000;++i)
    35     strcpy(ans[i],add(ans[i-1],ans[i-2]));
    36 }
    37 
    38 
    39 int main() {
    40     int T,n;
    41     dabiao();
    42     scanf("%d",&T);
    43     while(T--) {
    44         scanf("%d",&n);
    45         int len = strlen(ans[n]);
    46         for(int i = len-1;i>=0;--i)
    47         printf("%c",ans[n][i]);
    48         puts("");
    49     }
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    css自适应
    css居中
    js生成签名
    javascript与Android、IOS交互
    js截取路径参数
    js date对象
    js判断设备、浏览器类型
    live555实践
    关于django
    mysql的基本知识
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3256203.html
Copyright © 2011-2022 走看看