洛谷 P1604 B进制星球

题目背景

进制题目,而且还是个计算器~~

题目描述

话说有一天,小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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值