B进制星球
题目描述
话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。
分析
普通的高精度加法加一些模拟,不难,进位时注意是B进制不是10进制。
代码
const
maxn=2000;
var
c,a,b:array[0..maxn] of longint;
n:longint;
procedure init;
var
s1,s2:ansistring;
i,j,l1,l2:longint;
begin
readln(n);
readln(s1);
readln(s2);
l1:=length(s1);l2:=length(s2);
for i:=l1 downto 1 do
if s1[i] in ['0'..'9']
then a[maxn-l1+i]:=ord(s1[i])-48
else a[maxn-l1+i]:=ord(s1[i])-55;
for i:=l2 downto 1 do
if s2[i] in ['0'..'9']
then b[maxn-l2+i]:=ord(s2[i])-48
else b[maxn-l2+i]:=ord(s2[i])-55;
end;
procedure add;
var
i,g,s:longint;
begin
g:=0;
for i:=maxn downto 1 do
begin
s:=a[i]+b[i]+g;
c[i]:=s mod n;
g:=s div n;
end;
end;
procedure print;
var
i,j:longint;
begin
j:=1;
while (c[j]=0) and (j<maxn) do inc(j);
for i:=j to maxn do
if c[i]>9
then write(chr(c[i]+55))
else write(c[i]);
end;
begin
init;
add;
print;
end.
maxn=2000;
var
c,a,b:array[0..maxn] of longint;
n:longint;
procedure init;
var
s1,s2:ansistring;
i,j,l1,l2:longint;
begin
readln(n);
readln(s1);
readln(s2);
l1:=length(s1);l2:=length(s2);
for i:=l1 downto 1 do
if s1[i] in ['0'..'9']
then a[maxn-l1+i]:=ord(s1[i])-48
else a[maxn-l1+i]:=ord(s1[i])-55;
for i:=l2 downto 1 do
if s2[i] in ['0'..'9']
then b[maxn-l2+i]:=ord(s2[i])-48
else b[maxn-l2+i]:=ord(s2[i])-55;
end;
procedure add;
var
i,g,s:longint;
begin
g:=0;
for i:=maxn downto 1 do
begin
s:=a[i]+b[i]+g;
c[i]:=s mod n;
g:=s div n;
end;
end;
procedure print;
var
i,j:longint;
begin
j:=1;
while (c[j]=0) and (j<maxn) do inc(j);
for i:=j to maxn do
if c[i]>9
then write(chr(c[i]+55))
else write(c[i]);
end;
begin
init;
add;
print;
end.