Là một cái gì đó mới, tôi đang cố gắng hoàn thành Bài toán số 5 của dự án Euler, với tập lệnh theo lô (https://projecteuler.net/problem=5). Tuy nhiên; Tôi đã gặp một vài vấn đề. Nếu bất cứ ai có thể đi qua mã của tôi, đó sẽ là tuyệt vời.Thực hiện số học mô-đun trong một tập lệnh hàng loạt
@ECHO off
SET init=1
SET iter=1
SET /a func=%init% %% %iter%
cls
:Num
IF func==0 (
IF iter==20 (
ECHO Val = %init%
pause
exit
) ELSE (
SET /a iter+=1
GOTO Num
)
) ELSE (
SET iter=1
SET /a init+=1
GOTO Num
)
gì nó có nghĩa là phải làm là kiểm tra xem init mod iter
trả về 0, và nếu có, thêm 1 với giá trị iter
, cho đến khi nó đạt đến 21. Tuy nhiên; nếu nó không bằng 0, số lần lặp lại sẽ được đặt về 0 và sẽ bắt đầu tính lại.
Một ví dụ về những gì đang có nghĩa là để xảy ra:
1 mod 1 = 0, Therefor add 1 to iter
1 mod 2 != 0, Therefor init is set to 0 and 1 is added to init
2 mod 1 = 0, Therefor add 1 to iter
2 mod 2 = 0, Therefor add 1 to iter
2 mod 3 != 0, Therefor init is set to 0 and 1 is added to init
Và vân vân và vân vân.
Một ví dụ về những gì KHÔNG xảy ra:
1 mod 1 != 0, Therefor add 1 to init
2 mod 1 != 0, Therefor add 1 to init
3 mod 1 != 0, Therefor add 1 to init
Và vân vân và vân vân.
Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn.
Tôi đã thực hiện một vài thay đổi đối với mã, tuy nhiên; bây giờ nó bỏ qua số học modulus hoàn toàn và nói rằng 1 mod 1-20 = 0. Suy nghĩ về lý do tại sao nó làm điều này? '@ECHO tắt SET init = 1 SET iter = 1 SET/A func = "% init% %%% iter%" cls : Num NẾU "% func%" == "0 "( \t NẾU "% iter%" == "21"( \t \t tiếng vang. \t \t ECHO Val =% init% \t \t tiếng vang. \t \t vang Nhấn phím bất kỳ để thoát... \t \t p ause> nul \t \t thoát \t) ELSE ( \t \t echo% init% mod% iter% = 0; CONT \t \t SET/A ITER + = 1 \t \t GOTO Num \t) ) ELSE ( echo% init% mod% iter%!= 0; BREAK \t SET iter = 1 \t SET/A init + = 1 \t GOTO Num ) ' Xin lỗi cho các định dạng xấu xí. – Sennsei
Bạn không bao giờ tính toán lại '% func%'. – SomethingDark
Tôi sẽ kết hợp điều này như thế nào? – Sennsei