PKU 1023 The Fun Number System

The Fun Number System

下位ビットから順に計算していく、Nのiビット目が1ならば、より上位のビットがiビット目に影響することはないので、出力も1となる。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int t;  cin >> t;
    while ( t-- > 0 )
    {
        int k;
        string sys;
        long long N;
        cin >> k >> sys >> N;

        string w;

        for ( int i=k-1; i>=0; i-- )
        {
            int s = sys[i] == 'p' ? 1 : -1;

            if ( ( N & 1 ) == 0 )
                w = '0' + w;
            else
                w = '1' + w,
                N -= s;

            N >>= 1;
        }

        if ( N != 0 )
            w = "Impossible";

        cout << w << endl;
    }

    return 0;
}

C 134B。2009/12/14現在最短。

__int64 N;char*t;
main(k,v){
    for(gets(v);
        ~scanf("%d%s%lld",&k,v,&N);
        puts(N?"Impossible":v))
        for(t=v+k;t-->v;N/=2)
            *t=N%2?N-=*t-111,49:48;
}

Ozyさんのページを見ると、_int64(アンダーバー1つ)で書いているのだが、コンパイルエラー。VC2008で仕様が変わったのだろうか?