• poj2116 模拟题


    不知道错在哪里

    /*
    给定两个斐波那契表示数,要求用标准化表达方式表达
    然后将这两个数加起来,和也用标准化方式表达 
    思路:显然要将这两个数先用十进制表示,和也用十进制表示
    然后在转化成二进制即可
    1 1 2 3 5 8 13 21 34
    用贪心法能保证1不连续 
    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #define ll long long 
    using namespace std;
    ll f[50],a,b,c; 
    char buf[200],s1[200],s2[200];
    void init(){
        f[1]=1;f[2]=2;
        for(int i=3;i<=45;i++)
            f[i]=f[i-1]+f[i-2];
    }
    
    int ans1[200],ans2[200],ans3[200],len1,len2,len3;
    void solve(ll a,int *ans){//把a分解成斐波那契数列 
        for(int i=45;i>=1;i--){
            if(a==0) ans[45-i]=0;
            else if(a>=f[i]){
                ans[45-i]=1;
                a-=f[i];
            }
            else ans[45-i]=0;
        } 
    }
    
    int main(){
        init();
        while(scanf("%s %s",s1,s2)==2){ 
        memset(ans1,0,sizeof ans1);
        memset(ans2,0,sizeof ans2);
        memset(ans3,0,sizeof ans3);
        a=b=c=0;
            int Len1=strlen(s1);
            int Len2=strlen(s2);
            
            for(int i=0;i<Len1;i++)
                a+=(s1[i]-'0')*f[Len1-i];
            for(int i=0;i<Len2;i++)
                b+=(s2[i]-'0')*f[Len2-i];
                                        
            c=a+b;
            solve(a,ans1);
            solve(b,ans2);
            solve(c,ans3);    
            
            /*for(int i=0;i<=39;i++)cout<<ans1[i];
            puts("");
            for(int i=0;i<=39;i++)cout<<ans2[i];
            puts("");
            for(int i=0;i<=39;i++)cout<<ans3[i];
            puts("");*/
            
            len1=len2=len3=0;
            while(ans1[len1]==0)
                len1++;
            while(ans2[len2]==0)
                len2++;
            while(ans3[len3]==0)
                len3++;
            printf("  ");
            for(int i=len3;i<len1;i++)
                printf(" ");
            for(int i=len1;i<=44;i++)
                printf("%d",ans1[i]);
            puts("");
                
            printf("+ ");
            for(int i=len3;i<len2;i++)
                printf(" ");
            for(int i=len2;i<=44;i++)
                printf("%d",ans2[i]);
            puts("");
            
            printf("  ");
            for(int i=len3;i<=44;i++)
                printf("-");
            puts("");
            
            printf("  ");
            for(int i=len3;i<=44;i++)
                printf("%d",ans3[i]);
            
            puts("");
            puts("");
        }
        return 0;
    } 
  • 相关阅读:
    mybatis使用Example进行条件查询
    博客园页面DIY
    内网穿透
    使用ResponseEntity进行返回json数据
    spring中的ResponseEntity理解
    springboot整合mybatis通用Mapper
    解决pip安装过慢的问题
    【记录】linux 命令拷贝文件到远程服务器,linux下载文件到本地
    【记录】ELK之logstash同步mysql数据到Elasticsearch ,配置文件详解
    【记录】logstash 命令解释
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10445230.html
Copyright © 2020-2023  润新知