Cześć wszystkim.
Mam pewien problem z zadaniem NWW27. Zależy mi na tym żeby wykonać je w Pythonie bo uczę się teraz tego języka. A więc w Pythonie, w odróżnieniu od C, liczby nie mają teoretycznie żadnego limitu. Natomiast w moim programie działania na dużych liczbach tworzą dziwne anomalie.
Oto mój kod:
import math
def nww(a, b):
return (a * b) / math.gcd(a, b)
global temp
number_of_cases = int(input())
for x in range(number_of_cases):
number_of_numbers = int(input())
line = input()
numbers = list(line.split())
if number_of_numbers == 1:
print(numbers[0])
else:
for y in range(1, number_of_numbers):
temp = nww(int(numbers[y - 1]), int(numbers[y]))
numbers[y] = temp
print(int(temp))
Gdy dane są stosunkowo małe, program działa poprawnie. Jeżeli jednak działać będziemy na nieco większych liczbach to zaczynają się kłopoty. Przykładowo test:
1
2
18446744073709551615 18446744073709551615
Daje taki wynik:
18446744073709551616
(czyli liczbę o 1 większą niż powinien)
Pytanie kieruje przede wszystkim do osób biegłych w tym pięknym języku. Co tu właściwie zachodzi?
created
last reply
- 2
replies
- 527
views
- 2
users
- 2
likes
- 1
link