一花一世界

一树一菩提

LA11549 - Calculator Conundrum

Alice got a hold of an old calculator that can display n digits. She was bored enough to come up with
the following time waster.
She enters a number k then repeatedly squares it until the result over
ows. When the result
over
ows, only the n most signi cant digits are displayed on the screen and an error
ag appears. Alice
can clear the error and continue squaring the displayed number. She got bored by this soon enough,
but wondered:
\Given n and k, what is the largest number I can get by wasting time in this manner?"
Input
The rst line of the input contains an integer t (1 t 200), the number of test cases. Each test case
contains two integers n (1 n 9) and k (0 k < 10n) where n is the number of digits this calculator
can display k is the starting number.
Output
For each test case, print the maximum number that Alice can get by repeatedly squaring the starting
number as described.
Sample Input
2
1 6
2 99
Sample Output
9
99

 

#include <iostream>
#include <stdio.h>
using namespace std;
int next(int n,int k)
{
    long long k2 = (long long)k*k;
    int buf[100],l=0,rt = 0;
    while(k2 > 0)
    {
        buf[l++] = k2%10;
        k2 /= 10;
    }
    //位数不够取最大
    if(n>l)n=l;
    //取n位
    while(n--)
    {
        rt = rt*10 + buf[--l];
    }
    return rt;
}
int main()
{
    int t, n, k;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&k);
        int ans = k;
        int k1 = k, k2 = k;
        //每次会缩短两个之间一次操作
        while(true)
        {
            k1 = next(n,k1);
            k2 = next(n,k2);
            ans = max(ans,k2);
            k2 = next(n,k2);
            ans = max(ans,k2);
            if(k1 == k2)break;
        }
        printf("%d\n", ans);
    }
    return 0;
}


 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fljssj/article/details/46829825
个人分类: 数学找规律
上一篇LA3902 - Network
下一篇2678 - Subsequence
想对作者说点什么? 我来说一句

HDU - 1018 Big Number

斯特林公式

nameofcsdn nameofcsdn

2016-09-30 10:17:19

阅读数:1772

没有更多推荐了,返回首页

关闭
关闭