hum nọ vừa làm một bài toán là cho số n m tìm căn bậc n của a thế nên phải làm một hàm tính m mũ n ( với số lớn - đương nhiên )
post lên đây mong các bạn góp ý :
Code:
function cong_2_xau(st1,st2:string):string;
var i,so1,so2,nho:byte;
sai:integer;
kq,tam:string;
begin
nho:=0; kq:='';
while length(st2)<length(st1) do st2:='0'+st2;
while length(st2)>length(st1) do st1:='0'+st1;
for i:= length(st2) downto 1 do
begin
val(st1[i],so1,sai);
val(st2[i],so2,sai);
str((so1+so2+nho) mod 10,tam);
kq:=tam+kq;
nho:=(so1+so2+nho) div 10;
end;
if nho<>0 then
begin
str(nho,tam);
kq:=tam+kq;
end;
cong_2_xau:=kq;
end;
function nhan_xau_so(st1,st2:string):string;
var i,so1,so2,nho:byte;
sai:integer;
kq,tam:string;
begin
nho:=0; val(st2[1],so2,sai);
kq:='';
for i:= length(st1) downto 1 do
begin
val(st1[i],so1,sai);
str((so1*so2+nho) mod 10,tam);
kq:=tam+kq;
nho:=(so1*so2+nho) div 10;
end;
if nho<>0 then
begin
str(nho,tam);
kq:=tam+kq;
end;
nhan_xau_so:=kq;
end;
function nhan_so_so (st1,st2:string):string;
var i:byte;
kq:string;
begin
kq:='';
for i:=1 to length(st2) do
begin
kq:=cong_2_xau(kq+'0',nhan_xau_so(st1,st2[i]));
end;
nhan_so_so:=kq;
end;
function tinh(m:longint; n:byte):string;
var st,kq:string;
i:byte;
begin
str(m,st);
kq:=st;
for i:=1 to n-1 do
kq:=nhan_so_so(kq,st);
tinh:=kq;
end;
ý tưởng cơ bản của mình là nhân số m n lần, với mỗi lần nhân mình thực hiện phép nhân 2 số lớn , mà phép nhân 2 số lớn thực hiện như theo thực hiện tay là nhân với từng số một rồi cộng vào
Mình đã chạy và ra kết quả đúng nhưng gọi là số lớn mà cái của mình thì chỉ chạy với số mà ra kết quả có nhiều nhất 255 kí tự ( vì dùng xâu mà ) tức là chỉ cỡ 10^255 hoặc là 2147483647 ^ 30
Còn chuyển sang DLLK thì xem chừng phải thay đổi lại thuật toán
Mong các bạn góp ý thêm
@Master_Baby : Bạn tinh thật đấy, không ngờ vẫn có người chú ý và đọc được ( chắc tại "đồng cảnh ngộ " ), mà sao bạn biết mình học lớp 11 zậy, hay quá ( chắc cũng lại .. ) Dù sao cũng rất vui được bít thêm 1 người " đồng cảnh ngộ "
Bookmarks