Death to Binary?

该题主要是。将求出的结果(N)换算为没有连续1的串,从高位到低位寻找,找到第一个小于等于N的位置即为最后字符的长度,继续向前遍历组成N,位置赋值为 1 ,就将该数(Fn(i))从N中减去,直至遍历完成。(注意:如果i小于零,说明该数为 0 )
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

typedef long long ll;
ll fn[50]={1,2,3,5,8};

void init(){
    for(int i=5;i<50;i++)
        fn[i]=fn[i-1]+fn[i-2];
}

void out(ll num,string& str){
    int i;
    for(i=41;i>=0;i--){
        if(num>=fn[i]){
            break;
        }
    }
    for(int j=i;j>=0;j--){
        if(num>=fn[j]){
            str+='1';
            num-=fn[j];
        }else{
            str+='0';
        }
    }
    if(i<0)
        str+='0';
}

int main()
{
    init();
    string str1,str2;
    while(cin>>str1>>str2){
        int len1=str1.length();
        int len2=str2.length();
        ll num1=0,num2=0,num3;
        for(int i=0;i<len1;i++)
             if(str1[len1-1-i]=='1')
                num1+=fn[i];
        for(int i=0;i<len2;i++)
            if(str2[len2-1-i]=='1')
                num2+=fn[i];
        num3=num1+num2;
        string str3;
        str1.clear();str2.clear();
        out(num1,str1);
        out(num2,str2);
        out(num3,str3);
        cout<<"  ";for(int i=0;i<str3.length()-str1.length();i++) cout<<' '; cout<<str1<<endl;
        cout<<"+ ";for(int i=0;i<str3.length()-str2.length();i++) cout<<' '; cout<<str2<<endl;
        cout<<"  ";for(int i=0;i<str3.length();i++) cout<<'-'; cout<<endl;
        cout<<"  "; cout<<str3<<endl;
        cout<<endl;
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值