#include<bits/stdc++.h>
#define maxn 10005
#define int long long
using namespace std;
int a[maxn],b[maxn];
string s;
string t[maxn];
int number[maxn];
string changed(int m)
{
int dec = m;
string hex;
int reminder[maxn];
int count = 0;
int i = 0;
if(dec<0){
dec = abs(dec);
hex += "-";
}
else if(dec==0){
return 0;
}
while (dec != 0) {
reminder[i] = dec % 16;
dec /= 16;
i++;
if(dec>0){
count++;
}
}
string str[maxn];
for (int i = count; i >= 0; i--) {
if (reminder[i] >= 10) {
switch (reminder[i]) {
case 10:
str[i] = "A";
break;
case 11:
str[i] = "B";
break;
case 12:
str[i] = "C";
break;
case 13:
str[i] = "D";
break;
case 14:
str[i] = "E";
break;
case 15:
str[i] = "F";
break;
}
}
else if (reminder[i] < 10) {
str[i] = to_string(reminder[i]);
}
hex += str[i];
}
return hex;
}
inline int change(int m,int x)
{
int ans=0;
t[x]=changed(m);
while(m>0)
{
m/=16;
ans++;
}
return ans;
}
int init()
{
int x=1;
int m=0;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9')
{
m=(m<<1)+(m<<3)+(s[i]^48);
}
if(s[i]==','||s[i]=='}')
{
if(m==0)
{
b[x]=3;
a[x]=1;
x++;
continue;
}
number[x]=m;
if(ceil(log(m)/log(10))==floor(log(m)/log(10)))
{
a[x]=log(m)/log(10)+1;
}
else a[x]=(int)ceil(log(m)/log(10));
b[x]=ceil(change(m,x))+2;
m=0;
x++;
}
}
return x;
}
signed main()
{
getline(cin,s);
if(s[0]=='{'&&s[1]=='}')
{
cout<<"{}";
return 0;
}
int tot=init();
cout<<"{";
for(int i=1;i<=tot-1;++i)
{
if(number[i]==-1)
{
if(i==1) cout<<"0xFFFFFFFFFFFFFFFF";
else cout<<",0xFFFFFFFFFFFFFFFF"
}
if(a[i]<b[i])
{
cout<<number[i];
else
cout<<","<<number[i];
}
else
{
if(i==1)
cout<<"0x"<<t[i];
else
cout<<",0x"<<t[i];
}
}
cout<<"}";
return 0;
}
RT,第一个点错误,第四个点RE