题目链接:点击打开链接
题目大意:给你一个数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;
}