题目描述
小Y最近发现街上的汽车越来越多了,作为汽车的重要标志——汽车牌照也是越来越不够用了,已经从以前的十进制发展到了三十六进制了,比如以前的一个汽车牌照“苏D88888”,现在的牌照“苏D0YY11”。
小Y突发其想,想知道他看到的大量汽车牌照中最近的两个汽车牌照相差多少?
输入格式:
若干行(不超过500000行),每行为一个汽车牌照。
每个汽车牌照为一个7位的字符串,格式为SDxxxxx,其中一个x表示09或AZ所涉及的字母均为大写。
输出格式:
一行一个数,表示最近接近的两个汽车牌照之间的差值,要求为十进制数。
输入样例
SD12345
SD88888
SD22222
SD99999
输出样例
1678245
- 这道题只要直到三十六进制转十进制的方法就行,例如三十六进制36就等于3*36^1 + 6*36^0,然后就可以将拍照中SD后的五位字符转为相应的36位字符数字,A=10,Z=36,大概就是这样,先算出来然后存入数组然后计算
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<cmath>
using namespace std;
long reNum[500000];
main()
{
string carId;
long carNum[6],maxNum=0;
int ls;
int l=0;
while(cin>>carId){
for(int i=2;i<carId.size();i++){
if(carId[i]>='A'&&carId[i]<='Z'){
ls = carId[i];
carNum[i-1]=ls-55;
}else{
carNum[i-1]=carId[i]-'0';
}
}
long num=0;
int k=0;
for(int i=5;i>=1;i--){
num+=carNum[i]*pow(36,k++);
}
reNum[l++]=num;
maxNum=max(maxNum,num);
}
long minNum=maxNum;
sort(reNum,reNum+l);
for(int i=0;i<l-1;i++){
minNum=min(minNum,reNum[i+1]-reNum[i]);
}
cout<<minNum<<endl;
}