B-Cracking the Code

4163 단어 구덩이
B - Cracking the Code Time Limit:500MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit
Status
Practice
CodeForces 630L Description The protection of a popular program developed by one of IT City companies is organized the following way. After installation it outputs a random five digit number which should be sent in SMS to a particular phone number. In response an SMS activation code arrives.
A young hacker Vasya disassembled the program and found the algorithm that transforms the shown number into the activation code. Note: it is clear that Vasya is a law-abiding hacker, and made it for a noble purpose — to show the developer the imperfection of their protection.
The found algorithm looks the following way. At first the digits of the number are shuffled in the following order . For example the shuffle of 12345 should lead to 13542. On the second stage the number is raised to the fifth power. The result of the shuffle and exponentiation of the number 12345 is 455 422 043 125 550 171 232. The answer is the 5 last digits of this result. For the number 12345 the answer should be 71232.
Vasya is going to write a keygen program implementing this algorithm. Can you do the same?
Input The only line of the input contains a positive integer five digit number for which the activation code should be found.
Output Output exactly 5 digits without spaces between them — the found activation code of the program.
Sample Input Input 12345 Output 71232
제목: 다섯 자리 수를 입력하고 12345로 가정하면 첫 번째 조작은 13542로 이동하고 두 번째 조작은 위치를 옮긴 후의 다섯 자리를 구하고 결과의 마지막 다섯 자리 71232를 출력한다.
이 문제는 매우 까다롭다. 데이터는 64비트의 무기호 정형을 써야 한다.갱점2: 출력은 자리 차지 문자를 가지고 해야 한다. 그렇지 않으면 출력이 다섯 자리 수가 부족한 상황이 나타날 수 있다. 만약에 조작 후 마지막 다섯 자리가 00011이라면 자리 차지 문자를 넣지 않으면 11만 출력할 수 있다(이 점은 특별히 갱이다. 나는 아홉 번이나 발견하지 못했는데 마침내 열 번째로 이 점을 생각했다)
아래 위 코드
#include<cstdio>
#include<stack>
#include<cstring>
#include<string>
#include<cctype>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    long long int n;
    string str;
    while(cin>>str)
    {
        n=(str[0]-'0')*10000+(str[1]-'0')+(str[2]-'0')*1000+(str[3]-'0')*10+(str[4]-'0')*100;
        long long int num=1;
        for(long long int i=0; i<5; i++)
            num=num*n%100000;
        printf("%05I64d
"
,num);// } return 0; }

좋은 웹페이지 즐겨찾기