本来以为数据大小会超过max_longint,写了个大数类wa。结果试着用long写一个居然ac了。
没有什么技巧,就是基本的进制转换
#include<iostream>
using namespace std;
const int MAX = 100;
int main()
{
int data,oldn,newn;
unsigned long n;
char buffer[MAX],*p;
cin>>data;
while(data-- > 0)
{
cin>>buffer;
p=buffer;
n=oldn=newn=0;
while(*p != '<')
{
cout<<*p;
p++;
}
cout<<*p;
while(*++p != '>')
{
oldn = oldn*10 + *p-'0';
cout<<*p;
}
cout<<*p<<'=';
p=buffer;
while(*p != '<')
n = oldn*n + *p++ -'0';
while(*p++ != '>');
while(*p != '\0')
newn = newn*10 + *p++ -'0';
p=buffer+MAX-1;
*p = '\0';
while(p!=buffer)
{
p--;
*p = n%newn + '0';
n /= newn;
}
while(*p=='0') p++;
if(*p=='\0') p--;
cout<<p;
cout<<'<'<<newn<<'>'<<endl;
}
return 0;
}
using namespace std;
const int MAX = 100;
int main()
{
int data,oldn,newn;
unsigned long n;
char buffer[MAX],*p;
cin>>data;
while(data-- > 0)
{
cin>>buffer;
p=buffer;
n=oldn=newn=0;
while(*p != '<')
{
cout<<*p;
p++;
}
cout<<*p;
while(*++p != '>')
{
oldn = oldn*10 + *p-'0';
cout<<*p;
}
cout<<*p<<'=';
p=buffer;
while(*p != '<')
n = oldn*n + *p++ -'0';
while(*p++ != '>');
while(*p != '\0')
newn = newn*10 + *p++ -'0';
p=buffer+MAX-1;
*p = '\0';
while(p!=buffer)
{
p--;
*p = n%newn + '0';
n /= newn;
}
while(*p=='0') p++;
if(*p=='\0') p--;
cout<<p;
cout<<'<'<<newn<<'>'<<endl;
}
return 0;
}