poj 1906

    技术2022-05-19  20

     

    /*Three powersTime Limit: 1000MS  Memory Limit: 30000KTotal Submissions: 3653  Accepted: 1576Description

    Consider the set of all non-negative integer powers of 3. S = { 1, 3, 9, 27, 81, ... }

    Consider the sequence of all subsets of S ordered by the value of the sum of their elements. The question is simple: find the set at the n-th position in the sequence and print it in increasing order of its elements.Input

    Each line of input contains a number n, which is a positive integer with no more than 19 digits. The last line of input contains 0 and it should not be processed.Output

    For each line of input, output a single line displaying the n-th set as described above, in the format used in the sample output. Sample Input

    171478311259009816340490Sample Output

    { }{ 3, 9 }{ 1, 9, 27 }{ 3, 9, 27, 6561, 19683 }{ 59049, 3486784401, 205891132094649, 717897987691852588770249 }Source

    Waterloo local 2004.06.12

    分析:数的进制问题,多多益善,找规律吧

    */#include <cstdlib> #include <iostream> using namespace std; /* * */ char str[65][32] = {"1", "3", "9", "27", "81", "243", "729","2187", "6561", "19683", "59049", "177147", "531441","1594323", "4782969", "14348907", "43046721", "129140163","387420489", "1162261467", "3486784401", "10460353203","31381059609", "94143178827", "282429536481", "847288609443", "2541865828329", "7625597484987", "22876792454961","68630377364883", "205891132094649", "617673396283947","1853020188851841", "5559060566555523", "16677181699666569", "50031545098999707", "150094635296999121", "450283905890997363","1350851717672992089", "4052555153018976267", "12157665459056928801","36472996377170786403", "109418989131512359209", "328256967394537077627", "984770902183611232881","2954312706550833698643", "8862938119652501095929","26588814358957503287787", "79766443076872509863361","239299329230617529590083", "717897987691852588770249","2153693963075557766310747", "6461081889226673298932241","19383245667680019896796723", "58149737003040059690390169","174449211009120179071170507", "523347633027360537213511521","1570042899082081611640534563", "4710128697246244834921603689","14130386091738734504764811067", "42391158275216203514294433201","127173474825648610542883299603", "381520424476945831628649898809","1144561273430837494885949696427", "3433683820292512484657849089281"}; int main(int argc, char** argv) { int i,bol; long long n; while(cin>>n&&n) { if(n==1){cout<<"{ }"<<endl;;continue;} bol=i=0; --n; while(n) { if(n%2) if(bol==1)cout<<", "<<str[i]; else {cout<<"{ "<<str[i];bol=1;} ++i; n/=2; } cout<<" }"<<endl; } return 0; }  

     


    最新回复(0)