Death to Binary?

来源:互联网 发布:js match 匹配字符 编辑:程序博客网 时间:2024/06/07 13:23
该题主要是。将求出的结果(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;}


原创粉丝点击