丑陋代码:
#include<bits/stdc++.h>
using namespace std;
string intToA(int n,int m){
string ans="";
do{
int t=n%m;
if(t>=0&&t<=9)
ans+=(t+'0');
else
ans+=(t+'A'-10);
n/=m;
}while(n);
reverse(ans.begin(),ans.end());
return ans;
}
int main(){
char c1[2005];
char c2[2005];
int sum[2005];
int c1i[2005];
int c2i[2005];
int b;
cin>>b;
scanf("%s %s",&c1,&c2);
//------------------------------------------------------------
int c1long=strlen(c1); //c1长度
int c2long=strlen(c2); //c2长度
//加法逢b进1
int j=0;
for(int i=0;i<c1long;i++)
{
if(c1[i]>='A' && c1[i]<='Z')
{
c1i[c1long-i-1]=c1[i]-'A'+10;
}
else
{
c1i[c1long-i-1]=c1[i]-'0';
}
}
for(int i=0;i<c2long;i++)
{
if(c2[i]>='A' && c2[i]<='Z')
{
c2i[c2long-i-1]=c2[i]-'A'+10;
}
else
{
c2i[c2long-i-1]=c2[i]-'0';
}
}
//-------------------------------------------------------------
for(int i=0;i<min(c1long,c2long);i++)
{
if(c1i[i]+c2i[i]>=b)
{
sum[i]=(c1i[i]+c2i[i])-b+j;
j=1;
}
else
{
sum[i]=c1i[i]+c2i[i]+j;
j=0;
}
}
for(int i=min(c1long,c2long);i<max(c1long,c2long);i++)
{
if(c1long>c2long)
{
if(c1i[i]+j>=b)
{
sum[i]=c1i[i]+j-b;
j=1;
}
else
{
sum[i]=c1i[i]+j;
j=0;
}
}
else
{
if(c2i[i]+j>=b)
{
sum[i]=c2i[i]+j-b;
j=1;
}
else
{
sum[i]=c2i[i]+j;
j=0;
}
}
}
//-------------------------------------------------------------
if(j>0)
{
sum[max(c1long,c2long)]=1;
cout<<sum[max(c1long,c2long)];
}
//-------------------------------------------------------------
for(int i=max(c1long,c2long)-1;i>=0;i--)
{
//将数组转化为一个数字再把数字做进制转换
cout<<intToA(sum[i],b);
}
return 0;
}
求助求助求助
下载了一个数据1 结果对了
已提交就错了
呜呜呜呜呜呜呜呜呜