POJ1001

来源:互联网 发布:mac最好的视频播放器 编辑:程序博客网 时间:2024/06/02 21:20

#include <iostream>

using namespace std;

void chenab(char* a, long b)

{

    char len = (char)strlen(a);

    long tmpRet = 0;

    long carrayNum = 0;

    char i = 0;

    for (i = 0; i < len; ++i)

    {

        tmpRet = (a[i] - '0') * b + carrayNum;

        carrayNum = tmpRet / 10;

        a[i] = tmpRet % 10 + '0';

    }

    

    while (carrayNum) {

        a[i++] = carrayNum%10 + '0';

        carrayNum/=10;

    }

    

    a[i] = 0;

}


void rever(char* a)

{

    char len = (char)strlen(a) - 1;

    for (char i = 0; i <(len + 1)/2; ++i)

    {

        a[i]       ^= a[len - i];

        a[len - i] ^= a[i];

        a[i]       ^= a[len - i];

    }

}


void printLargetNum(char* a, char pointBit)

{

    char len = (char)strlen(a);

    for (char i = len - 1; i >= 0; --i) {

        cout << a[i];

    }

    cout << endl;

}


long charArry2Long(char *a)

{

    char len = (char)strlen(a);

    long ret = 0;

    for(char i = 0; i < len; ++i)

    {

        ret = ret * 10 + a[i] - '0';

    }

    return ret;

}


char formatBeforeRever(char* a, bool removePoint = true)

{

    char len = (char)strlen(a);

    bool cutting = true;

    char cutBit = 0;

    for(char i = len - 1; i >= 0; --i)

    {

        if (cutting and a[i] != '0')

        {

            cutBit = i + 1;

            cutting = false;

        }

        if (a[i] == '.') {

            if (i + 1 == cutBit) {

                cutBit = i;

                a[cutBit] = 0;

            }

            else if (removePoint)

            {

                memmove(a+i, a + i + 1, strlen(a + i + 1) + 1);

                a[cutBit-1] = 0;

            }

            

            char ret = cutBit - 1 - i;

            return ret < 0?0:ret;

        }

    }

    

    return 0;

}


void printLargeNum(char* retArray, char pointbit)

{

    if (pointbit != 0) {

        memmove(retArray+pointbit + 1, retArray+pointbit, strlen(retArray+pointbit) + 1);

        retArray[pointbit] = '.';

    }

    rever(retArray);

    formatBeforeRever(retArray, false);

    if (pointbit > strlen(retArray)) {

        cout << '.';

        for (char i = pointbit - strlen(retArray); i; --i) {

            cout << '0';

        }

    }

    cout << retArray << endl;

}


void test1001()

{

    int n; char a[126];

    char pointBit = 0;

    long b = 0;

    while (cin >> a >> n) {

        if (not n) {

            cout << 1 << endl;

            continue;

        }

        pointBit = formatBeforeRever(a);

        b = charArry2Long(a);

        rever(a);

        for (char i = 1; i < n; ++i)

        {

            chenab(a, b);

        }

        printLargeNum(a, n * pointBit);

    }

}


int main() {

    test1001();

    return 0;

}

原创粉丝点击