【题解】B进制星球

难点:

change()函数的应用

将1-10和26个alphabet打表(所以题目限制才是进制数<=36)

/*
reference:

translation:
	
solution:
	标签中竟然有“高精”,其实就是模拟类似高精的B进制下的进位啦
trigger:
	
note:
	*isdigit()竟然是字符串的函数……
	*英文字母若要表示数字该如何转换
	*记得判断高高位
record:

date:
	2019.09.11 
*/

const int N =2e3+10;
/* 
const char* output="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
*/ 

int a[N],b[N],c[N];
int base;
string s1,s2;

inline int change(char ch){
	if(isalpha(ch))
		return ch-'A'+10;
	else 
		return ch-'0';
}

inline char change_back(int x){
	return 'A'+x-10;
}

int main(){
//	freopen("B.txt","r",stdin);
	rd(base);
	cin>>s1>>s2;
	int len1=s1.length();//千万不能用long long 存,因为位数可能会>64,养成大数用字符串存的习惯 
	int len2=s2.length();
	rep(i,0,len1-1)
		a[i]=change(s1[len1-i-1]);//逆序转存至数组,方便进位
	rep(i,0,len2-1)
		b[i]=change(s2[len2-i-1]);
	int len=max(len1,len2);
	rep(i,0,len-1){
		c[i]+=a[i]+b[i];
		c[i+1]=c[i]/base;
		c[i]%=base;
	} 
	if(c[len])++len;//记得判断 最最高位是否有数,原来的最高位是len 
	dwn(i,len-1,0){
		if(c[i]<=9 && c[i]>=0)
			printf("%d",c[i]);
		else printf("%c",change_back(c[i]));
	}
	return 0;
}
/*
4
123
321
*/
//1110
posted @ 2019-10-08 15:13  设计涉及社稷  阅读(141)  评论(0编辑  收藏  举报