Cô giao bài khó quá mình chả hiểu gì mong mn giúp mình vứi ạ. Nhập vào hai xâu s1 và s2 (số nguyên) tính tổng của hai xâu không giới hạn số lượng độ dài của xâu
1 câu trả lời
Chỉ xử lý số dương:
uses crt;
type bignum = ansistring;
var a, b:bignum;
i:longint;
function add(a, b:bignum):bignum;
var ans:bignum;
rem, i, tmp:longint;
begin
rem:=0; ans:='';
while length(a) < length(b) do a:='0' + a;
while length(b) < length(a) do b:='0' + b;
for i:=length(a) downto 1 do
begin
tmp:=ord(a[i]) + ord(b[i]) - 96 + rem;
rem:=tmp div 10;
tmp:=tmp mod 10;
ans:=chr(tmp + 48) + ans;
end;
if rem = 1 then ans:='1' + ans;
exit(ans);
end;
begin
clrscr;
readln(a);
readln(b);
writeln(add(a, b));
end.
Xử lí cả số âm:
uses crt;
type bignum = ansistring;
var a, b:bignum;
i:longint;
procedure swap(var a, b:bignum);
var tmp:bignum;
begin
tmp:=a; a:=b; b:=tmp;
end;
function cmp(a, b:bignum):boolean;
begin
if length(a) = length(b) then
exit(a < b);
exit(length(a) < length(b));
end;
function type1(a, b:bignum):bignum;
var ans:bignum;
rem, i, tmp:longint;
neg:boolean;
begin
neg:=false;
if (a[1] = '-') then
begin
neg:=true;
delete(a, 1, 1);
delete(b, 1, 1);
end;
rem:=0; ans:='';
while length(a) < length(b) do a:='0' + a;
while length(b) < length(a) do b:='0' + b;
for i:=length(a) downto 1 do
begin
tmp:=ord(a[i]) + ord(b[i]) - 96 + rem;
rem:=tmp div 10;
tmp:=tmp mod 10;
ans:=chr(tmp + 48) + ans;
end;
if rem = 1 then ans:='1' + ans;
if neg then ans:='-' + ans;
exit(ans);
end;
function sub(a, b:bignum):bignum;
var ans:bignum;
tmp, rem, i:longint;
neg:boolean;
begin
ans:=''; rem:=0;
while length(a) < length(b) do a:='0' + a;
while length(b) < length(a) do b:='0' + b;
for i:=length(a) downto 1 do
begin
tmp:=ord(a[i]) - ord(b[i]) - rem;
if tmp < 0 then
begin
rem:=1;
tmp:=tmp + 10;
end;
ans:=chr(tmp + 48) + ans;
end;
while (length(ans) > 1) and (ans[1] = '0') do delete(ans, 1, 1);
exit(ans);
end;
function type2(a, b:bignum):bignum;
var ans:bignum;
neg:boolean;
begin
if a[1] = '-' then swap(a, b);
delete(b, 1, 1);
if cmp(a, b) then neg:=true else neg:=false;
if neg then swap(a, b);
ans:=sub(a, b);
if neg then ans:='-' + ans;
exit(ans);
end;
function inc(var a:bignum; b:bignum):bignum;
begin
if ((a[1] = '-') and (b[1] = '-') or ((a[1] <> '-') and (b[1] <> '-'))) then
a:=type1(a, b)
else
a:=type2(a, b);
exit(a);
end;
begin
clrscr;
readln(a);
readln(b);
inc(a, b);
writeln(a);
end.