2016 Multi-University Training Contest 3 1001 Sqrt Bo

来源:互联网 发布:linux端口重定向 编辑:程序博客网 时间:2024/05/16 14:21

题目链接:点击打开链接

题目大意:给你一个数n,问在多少次以内可以通过不断开方(向下取整)变成1

解题思路:打表计算情况最大值,注意0的处理

代码:

#include<iostream>#include<vector>#include<cmath>#include<algorithm>#include<ctime>#include "cstdio"#include "string"#include "string.h"#include "map"#include "bitset"using namespace std;long long a[6];int main(){    a[0] = 1;    for (int i = 1;i <= 5;i++)    {        a[i] = (a[i - 1] + 1)*(a[i - 1] + 1) - 1;    }    string str;    while (cin >> str)    {        int len = str.length();        if (len > 10)        {            puts("TAT");            continue;        }        if (str == "1")        {            puts("0");            continue;        }        if (str == "0")        {            puts("TAT");            continue;        }        long long num = 0;        for (int i = 0;i < len;i++)            num = num * 10 + (int)(str[i] - '0');        int flag = -1;        for (int i = 1;i < 6;i++)        {            if (num <= a[i])            {                flag = i;                break;            }        }        if (flag != -1)        {            printf("%d\n", flag);        }        else            puts("TAT");    }    return 0;}

0 0