题目背景
进制题目,而且还是个计算器~~
题目描述
话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。
输入输出格式
输入格式:
共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。
输出格式:
一个B进制数,表示输入的两个数的和。
输入输出样例
输入样例#1:
4
123
321
输出样例#1:
1110
说明
进制计算器
高精度:
1.读入用超长字符串,然后转数组。
2.按位相加,并且注意进位。
时间复杂度:O(3000)
var
a,b,c:array [1..3000] of longint;
n,m:ansistring;
i,s,x:longint;
begin
readln(s);
readln(n);
readln(m);
for i:=1 to length(n) do
if n[i] in ['0'..'9'] then a[length(n)-i+1]:=ord(n[i])-48
else a[length(n)-i+1]:=ord(n[i])-55;
for i:=1 to length(m) do
if m[i] in ['0'..'9'] then b[length(m)-i+1]:=ord(m[i])-48
else b[length(m)-i+1]:=ord(m[i])-55;
x:=0;
for i:=1 to 3000 do
begin
c[i]:=a[i]+b[i]+x;
x:=c[i] div s;
c[i]:=c[i] mod s;
end;
x:=3000;
while (c[x]=0) and (x<>1) do dec(x);
for i:=x downto 1 do
if c[i]>9 then write(chr(c[i]+55))
else write(c[i]);
end.