从高到低逐位减一并将后续位改为9得到数字(用stoll处理去前导0),并将其反转得到若干数字取其中最大(包括原r的反转值),附加条件判断是否在l与r之间
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string l,r;
cin>>l>>r;
string k=r;
reverse(k.begin(),k.end());
long long f=stoll(k);
for(int i=0;i<r.length();i++){
if(r[i]-'0'>=1){
string q=r;
q[i]=q[i]-1;
for(int j=i+1;j<q.length();j++){
q[j]='9';
}
long long q1=stoll(q);
if(q1<=stoll(r)&&q1>=stoll(l)){
q=to_string(q1);
reverse(q.begin(),q.end());
long long n=stoll(q);
f=max(f,n);
}
}
}
cout<<f<<endl;
}
}
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string l,r;
cin>>l>>r;
string k=r;
reverse(k.begin(),k.end());
long long f=stoll(k);
for(int i=0;i<r.length();i++){
if(r[i]-'0'>=1){
string q=r;
q[i]=q[i]-1;
for(int j=i+1;j<q.length();j++){
q[j]='9';
}
long long q1=stoll(q);
if(q1<=stoll(r)&&q1>=stoll(l)){
q=to_string(q1);
reverse(q.begin(),q.end());
long long n=stoll(q);
f=max(f,n);
}
}
}
cout<<f<<endl;
}
}

京公网安备 11010502036488号