51nod 1795 奥林匹克年

51nod 1795 奥林匹克年

题目传送门

题目

奥林匹克竞赛从1989年开始举行,每一个奥林匹克年都会有一个缩写IAO’y, y表示那一年的最后几位数字。 组织者会取一个之前未被用过的缩写来表示该年份,而且要尽可能的短。

例如,前三个奥林匹克年是1989,1990和1991,他们对应的缩写是IAO’9, IAO’0 和IAO’1,而2015的缩写是IAO’15,因为IAO’5已经被1995用过了。

现在给出一个缩写,请判断这个是代表哪一年的。

输入
多组测试数据。
第一行有一个整数n (1≤n≤1000) ,表示要处理n组数据。
接下来n行,每一行有一个缩写。每一个缩写最多包含9位数字。

输出
对于每一个缩写,请输出对应的年份。

样例
输入 :

5
IAO’15
IAO’2015
IAO’1
IAO’9
IAO’0

输出:

2015
12015
1991
1989
1990

解题思路
通过计算我们可以得出:
用一位数当后缀的有10个年份
用二位数当后缀的有100个年份
用三位数当后缀的有1000个年份

以此类推

那我们就可以把这个年份的范围算出来,然后累加 1 0 s 10^{s} 10s (s为这个年份的位数)
由于后缀保证相同,所以第一个大于“范围”的就是我们要求的年份。

举个例子
例如IAO’2021,由于2021为四位数,所以它的范围必定在1989+10+100+1000 = 3099之外,因为3099内的年份都以一位、二位、三位的数字当后缀了。
然后我们累加10000,得到的第一个大于3099的数12021就是答案。

上代码

#include <bits/stdc++.h>
using namespace std;

int n;
char str[100];
int m[10], sum[10];

int main() {
	cin >> n;
	mr[0] = 1;
	for (int i = 1; i <= 10; i++) {
		m[i] = m[i - 1] * 10;
		sum[i] = sum[i - 1] + m[i];
	}
	while (n--) {
		cin >> str;
		int len = strlen(str + 4);
		int num = atoi(str + 4);
		while (num < 1989 + sum[len - 1]) num += m[len];
		cout << num << endl;
	}
	return 0;
}

请您点一下下面的大拇指😊

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值