30/09/2018, 18:27

Tính số mũ bằng phép cộng đã có ai thử chưa?

Em đọc trên mạng thấy một đề bài tính x^y bằng phép cộng hoàn toàn (không được sử dụng phép toán nào khác )

Ý là toàn bộ thuật toán chỉ dùng phép cộng

Pham Van Hai viết 20:42 ngày 30/09/2018

Bạn thử theo cách ở đây:

int multiply(int x, int y)
{
    int product = 0;

    for (int i = 0; i<y; i++)
       product += x;

    return product;
}

int power(int x, int exponent)
{
    int result = 1;

    for (int i = 0; i < exponent; i++)
        result = multiply(result, x);

    return result;
}
stackoverflow.com
powervillekittenkins

Calculate exponents via addition only

algorithm, mips, addition, exponent
asked by powervillekittenkins on 11:30PM - 13 Dec 09
Mai Anh Dũng viết 20:42 ngày 30/09/2018
int product;

Chưa có giá trị khởi tạo kìa.

int product = 0;
17XGOD viết 20:27 ngày 30/09/2018

để em ngâm cứu cảm ơn anh

17XGOD viết 20:43 ngày 30/09/2018

cho em hỏi biến y dùng để làm gì vậy anh??

Mai Anh Dũng viết 20:33 ngày 30/09/2018

Y chính là cơ số, ví dụ

2^3 thì y=2

17XGOD viết 20:27 ngày 30/09/2018

em nghĩ y là số mũ chứ anh đạt, nếu y là cơ số thì

product+=y;
``` chứ
Mai Anh Dũng viết 20:31 ngày 30/09/2018

product ở đây nó thay đổi.

Ví dụ 5^3 đi. Tức là

5*5*5 = (5+5+5+5+5)*5 = 25*5 = 25+25+25+25+25

trong lần tính đầu, product = 5+5+5+5+5. và lần sau là 25

Giá trị y không đổi, chính là số lần ta phải cộng.

Nhưng x thì thay đổi, sau mỗi lần nhân, nó to ra. Thế nên product sẽ tăng lên theo cấp số nhân

17XGOD viết 20:40 ngày 30/09/2018

à em hiểu rồi ngồi tính giấy nãy giờ

Ngọa Thiên Long viết 20:39 ngày 30/09/2018

em đọc xong cái tiêu đề thì nghĩ là chỉ dùng mỗi phép cộng thôi chứ ạ, ko đc dùng phép nhân chứ ạ.

17XGOD viết 20:29 ngày 30/09/2018

không được dùng phép nào ngoài phép công không chỉ ở lúc tính số mũ mà cả bài toán em đều phải dùng phép cộng hết chỉ cần có phép khác xuất hiện là không đạt

Mai Anh Dũng viết 20:36 ngày 30/09/2018

Ừ, bài này không dùng phép cộng. Đạt chỉ ví dụ là nếu dùng phép nhân thì nó thế nào thôi và cách chuyển từ nhân sang cộng

Nguyễn Trí Dân viết 20:39 ngày 30/09/2018

Bạn coi thử cái này xem, mình viết bằng matlab, cũng khá dễ hiểu

x = input('Nhap x');
y=input('Nhap y');
result=x;
a=x;
for n=2:y
    for i=1:(x-1)
        result=result+a;
    end
    a=result;
end
result
17XGOD viết 20:29 ngày 30/09/2018

sao em code thì chạy ok nhưng giải tay thì không được nhỉ

Anh có thể giải thích hộ em khúc này result=result+a; a=rerult; lúc đầu em tính được result =10, gán a=10; sau đó lặp lại result=result + a =10 +10; ???


À em hiểu rồi xem debug mới hiểu tks anh

Windy Kid viết 20:30 ngày 30/09/2018

Bài toán khá hay … mình bắt đầu yêu daynhauhoc.com rồi đấy

Khánh Phạm viết 20:31 ngày 30/09/2018

A có thể giai thich bang ngôn ngu tu nhien dk ko…e ms hok mak bài nay lam ko ra

Nguyễn Xuân Phúc viết 20:33 ngày 30/09/2018

a^b = aaaa (b lần số a)
mà a*b = a+a+…+a+a (b lần số a)
a^b = (a^(b-1))*a = a^(b-1) + a^(b-1) + … + a^(b-1) + a^(b-1)
… cứ thể phân tích ra

Khánh Phạm viết 20:40 ngày 30/09/2018

A có fb ko ạ…có gì nhờ a giup với…ms học nam đầu

Văn Dương viết 20:35 ngày 30/09/2018

Các bạn lo lắng một ngày nào đó máy tính không thể thực hiện được phép nhân, tính mũ nữa sao
Thế thì phải tập cộng phép này thôi :
1.3^2.7

Bài liên quan
0