洛谷·P1604 B进制星球
注意:
- 因为N的范围超过十进制,所以会用到字符和整形的转换
- 最高位进位,则存answer的数组读取长度+1
- 输入时数组第0位存的最高位,输出时第0位存的最低位
#include <cstdio>
#include <string.h>
int m[2500];
int n[2500];
char mm[2500];
char nn[2500];
int s[2500];
int f(int a,int b)
{
int i;
for(i=0;i<a;i++)
{
if(nn[i]>='A')n[i]=nn[i]-'A'+10;
else n[i]=nn[i]-'0';
}
for(i=0;i<b;i++)
{
if(mm[i]>='A')m[i]=mm[i]-'A'+10;
else m[i]=mm[i]-'0';
}
return 0;
}
int main()
{
int a,b,i,j,k,p,g,madama;
scanf("%d",&k);
scanf("%s%s",&nn,&mm);
a=strlen(nn);
b=strlen(mm);
madama=a>b?a:b;
f(a,b);
for(i=0,j=0,g=0;i<a&&j<b;i++,j++)
{
p=n[a-i-1]+m[b-j-1]+g;
s[i]=p%k;
if(p>=k)g=1;
else g=0;
}
if(i<a)for(;i<a;i++)
{
p=n[a-i-1]+g;
s[i]=p%k;
if(p>=k)g=1;
else g=0;
}
if(j<b)for(;j<b;j++)
{
p=m[b-j-1]+g;
s[j]=p%k;
if(p>=k)g=1;
else g=0;
}
if(g==1){
s[madama]=1;
madama++;
}
for(i=madama-1;i>=0;i--){
if(s[i]<10)printf("%d",s[i]);
else printf("%c",s[i]+'A'-10);
}
return 0;
}