Ladygod 任意进制的转化
Source
UESTC 1012 (CDOJ 1012)
My Solution
#include
#include
#include
using namespace std;
int maxx(const string& ch1,const string& ch2)
{
int m=0;
for(int i=0;i<ch1.size();i++) m=(m>=ch1[i]-'0')?m:ch1[i]-'0';
for(int i=0;i<ch2.size();i++) m=(m>=ch2[i]-'0')?m:ch2[i]-'0';
return m;
}
void swapp(string& ch1,string& ch2,const string& str1,const string& str2)
{
for(int i=str1.size()-1;i>=0;i--)
ch1+=str1[i];
for(int j=str2.size()-1;j>=0;j--)
ch2+=str2[j];
}
int pow(const int &a,int b)
{
int r=1,base=a;
while(b!=0){
if(b&1)
r*=base;
base*=base;
b>>=1;
}
return r;
}
int main()
{
int T,jin=0,midans1,midans2,midans,answ=0;
string str1,str2,ch1,ch2;
scanf("%d",&T);
while(T--){
ch1.clear();ch2.clear();midans1=1;midans2=0;midans=0,answ=0;
cin>>str1>>str2;
swapp(ch1,ch2,str1,str2);//cout<<ch1<<" "<<ch2;
jin=maxx(ch1,ch2)+1;//cout<<jin<<" ";
for(int i=0;i<ch1.size();i++){
midans1+=(ch1[i]-'0')*pow(jin,i);
}
for(int j=0;j<ch2.size();j++){
midans2+=(ch2[j]-'0')*pow(jin,j);
}
midans=midans1+midans2;
while(midans){
midans/=jin;answ++;
}
if(T) printf("%dn",answ);
else printf("%d",answ);
}
return 0;
}
2、一般方法,也超时了,(┬_┬)
include
#include
#include
#include
#include
using namespace std;
//!这个版本在时间上进行优化, 直接用string的性质直接在前面补0
int ans[16];
int maxx(const string& ch1,const string& ch2)
{
int m=0;
for(int i=0;i<ch1.size();i++) m=(m>=ch1[i]-'0')?m:ch1[i]-'0';
for(int i=0;i<ch2.size();i++) m=(m>=ch2[i]-'0')?m:ch2[i]-'0';
return m;
}
int main()
{
int T,jin=0,answ=0;
string ch1,ch2;
scanf("%d",&T);
while(T--){
ch1.clear();ch2.clear();
memset(ans,0,sizeof(ans));answ=0;
cin>>ch1>>ch2;
//swapp(ch1,ch2,str1,str2);//cout<<ch1<<" "<<ch2;
jin=maxx(ch1,ch2)+1;//cout<<jin<<" "; while(ch1.size()!=4){ch1='0'+ch1;} while(ch2.size()!=4){ch2='0'+ch2;} for(int i=3;i>=0;i--){
ans[4-i]+=(ch1[i]-'0')+(ch2[i]-'0');//cout<<ans[i+1]<<" "; if(ans[4-i]>=jin) {ans[4-i]=ans[4-i]-jin;ans[4-i+1]+=1;}
}
for(int j=5;j>0;j--){
//cout<<ans[j];
if(ans[j]!=0) {answ=j;break;}
}
if(T) printf("%dn",answ);
else printf("%d",answ);
}
return 0;
}
3、优化好几个地方,☺总算没有超时 这个倒是还算挺快的
#include
#include
#include
using namespace std;
char ch1[8],ch2[8];
//!这个版本在时间上有相对进行了很多优化
int ans[16];
int maxx()
{
int m=0;
for(int i=0;i<4;i++)
m=(m>=ch1[i]-'0')?m:ch1[i]-'0';
for(int i=0;i<4;i++)
m=(m>=ch2[i]-'0')?m:ch2[i]-'0';
return m;
}
int main()
{
int T,jin=0,answ=0,c1,c2;
scanf("%d",&T);
while(T--){
memset(ch1,'0',sizeof(ch1));
memset(ch2,'0',sizeof(ch2));
memset(ans,0,sizeof(ans));answ=0;
scanf("%d%d",&c1,&c2);//cout<<c1<<" "<<c2; for(int i=3;c1>0||c2>0;i--){
if(c1>0){ch1[i]=c1%10+'0';c1/=10;} //笑脸的原因是忘了转化了,笑脸的ASCII码是 01
if(c2>0){ch2[i]=c2%10+'0';c2/=10;}
}
//swapp(ch1,ch2,str1,str2);//cout<<ch1<<" "<<ch2;
jin=maxx()+1;//cout<<jin<<" "; /* while(ch1.size()!=4){ch1='0'+ch1;cot++;} while(ch2.size()!=4){ch2='0'+ch2;cot++;} */ //printf("%s %s ",ch1,ch2); for(int i=3;i>=0;i--){
ans[4-i]+=(ch1[i]-'0')+(ch2[i]-'0');//cout<<ans[i+1]<<" "; if(ans[4-i]>=jin) {ans[4-i]=ans[4-i]-jin;ans[4-i+1]+=1;}
}
for(int j=5;j>0;j--){
//cout<<ans[j];
if(ans[j]!=0) {answ=j;break;}
}
if(T) printf("%dn",answ);
else printf("%d",answ);
}
return 0;
}
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-1012-ladygod/
共有 0 条评论