题目描述:
大致思路:
长度为1的后缀可以表示10个年份。。
长度为2的后缀可以表示100个年份。。
长度为k的后缀可以表示10k10k个年份。。 这样加起来
到长度为k+1k+1的后缀的时候,已经有tot=101+102+103+…+10ktot=101+102+103+…+10k个年份被唯一表示过了。 所以长度为k+1k+1的后缀可以表示的年份在1989+tot1989+tot到1989+tot+10k+1−11989+tot+10k+1−1之间。这样便可以根据后缀的位数唯一表示出年份了。。
注意前导0,就这么简单。
代码:
(祭GZX与SYX的那一刻万岁!)
#include<cstdio>
#include<iostream>
using namespace std;
int n,ans;
string s;
int main(){
scanf("%d",&n);
for(int i=0;i<n;++i){
int q=0;
cin>>s;
s = s.substr(4);
int len = s.length();
for(int i = 0; i < len; ++i)
q = q * 10 + s[i] - '0';
int SYX = 0;
int GZX = 10;
for(int i = 1; i < len; ++i){
SYX += GZX;
GZX *= 10;
}
while(SYX + 1989 > q) q += GZX;
printf("%d\n",q);
}
return 0;
}