洛谷1604 B进制星球

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值