UVa 11398 The Base-1 Number System

解題一:使用bitset,注意! '#'不代表此筆資料結束,需先有空白加上單獨的 '#'
code:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include<vector>
#include<bitset>
using namespace std;
typedef pair<char,int> ci;
int main()
{
    string input="";
    string flag="1",ans="";
    while(cin>>input && input[0]!='~')
    {
        int len=input.size();
        if(input[0]=='#')
        {
            bitset<32> bb(ans);
            cout<<bb.to_ulong()<<endl;
            flag="1",ans="";
        }
        else if(len==1flag="1";
        else if(len==2) flag="0";
        else for(int j=0; j<len-2; j++) ans+=flag;
    }
    return 0;

}
解題二:直接算二進位(參考http://knightzone.org/?p=1909)
code:
#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    string baseone_num_part;
    string basetwo_num = "";
    int num;
    char flag;
    while( cin >> baseone_num_part && baseone_num_part != "~")
    {
        if( baseone_num_part == "#" )
        {
            num = 0;
            for( int i = 0 ; i < basetwo_num.length() ; i++ )
            {
                if( i ) num *= 2;
                if( basetwo_num[i] == '1' ) num += 1;
            }
            basetwo_num = "";
            cout<<"aa"<<endl;
            printf( "%d\n", num );
        }
        else if( baseone_num_part.length() == 1 )
            flag = '1';
        else if( baseone_num_part.length() == 2 )
            flag = '0';
        else
            for( int i = 0 ; i < baseone_num_part.length()-2 ; i++ )
                basetwo_num += flag;
    }
    return 0;
}

留言

這個網誌中的熱門文章

Things a Little Bird Told Me: Confessions of the Creative Mind

UVa 12970 Alcoholic Pilots

UVa 483 Word Scramble