#include<iostream>
using namespace std;
long f(long long n)
{
if (n < 20180001) return n + 2017;
return f(f(n - 2018));
}
int main()
{
long long n;
cin >> n;
if(n>20180001){
int temp = 20180001;
n-=temp;
n%=2018;
n+=temp;
}
cout << f(n) << endl;
return 0;
}
题目给的代码内存爆了,应该是递归太多,我们可以先把2018001的部分提取出来,发现剩下的部分就是一直-2018
我们就对剩下的部分取2018的mod,最后把n加回来2018001 再丢入函数 最多递归两次 一次-2018 一次+2017 有更简单的办法 懒得想

京公网安备 11010502036488号