60分求助
查看原帖
60分求助
346662
yezihao1楼主2022/2/6 21:41
#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

2022/2/6 21:41
加载中...