Trang chủ Tin Học Lớp 11 Cô giao bài khó quá mình chả hiểu gì mong...

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â

Câu hỏi :

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

Lời giải 1 :

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.

Thảo luận

-- Bạn có code bằng c++ ko cho mình xin với ạ
-- À thui ko cần đâu bạn,bạn giải thích cho mình đoạntmp:=ord(a[i]) + ord(b[i]) - 96 + rem; rem:=tmp div 10; tmp:=tmp mod 10; ans:=chr(tmp + 48) + ans; được khum,mình khá là khó hiểu=((
-- ord(a[i]) - 48 tương đương val(a[i]) -> ord(a[i]) - 48 + ord(b[i]) - 48 = ord(a[i]) - ord(b[i]) - 96 rem là biến nhớ mấy cái này đi đặt tính như hồi cấp 1 thôi :))
-- Ok bạn nha
-- Nhưng mà bạn cho mình ví dụ được ko,nhập vào xong xử lí từng cái như nào vậy,cho ví dụ nhỏ nhỏ thui ạ
-- Nhưng mà bạn ơi,mình muốn nhập 34 và 012 in ra 46 mà lại in ra 046
-- à mình quên bỏ số 0 đằng trc r :v
-- Mà thui kệ đi ko sao nha bạn:3

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 11

Lớp 11 - Năm thứ hai ở cấp trung học phổ thông, gần đến năm cuối cấp nên học tập là nhiệm vụ quan trọng nhất. Nghe nhiều đến định hướng sau này rồi học đại học. Ôi nhiều lúc thật là sợ, hoang mang nhưng các em hãy tự tin và tìm dần điều mà mình muốn là trong tương lai nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247