2014-12-09 3 views
0

파이썬에서 프로젝트 오일러 문제를 푸는 동안 (나는 초보자 다) 다음 오류가 발생했습니다. 문제는 2^1000의 숫자 합계를 찾는 것입니다. 이를 위해 다음 코드를 작성했습니다.파이썬 합계 자릿수 오류

sum=0 
x=2**1000 
while(x): 
    sum += x%10 
    print(sum) #Just to check whats happening 
    x /= 10 

print("\n"*5) 
print("Sum = ",sum) 

이렇게하려면 십진법을 중간에 추가합니다.

출력 :

6 
10.0 
10.0 
12.0 
16.0 

.... 

1116.0 
1122.0 
1131.625 #Why does the decimal get added? 
1138.59375 

..... 

1181.495136589947 
1186.5812084526442 
1188.089815638914 
1195.240676357541 
1195.9557624294036 
1197.0272710365898 
1197.1344218973084 
1197.1451369833803 
1197.1462084919874 

..... 
1197.1463275484991 #This number gets repeated a lot of times 
1197.1463275484991 
1197.1463275484991 



Sum = 1197.1463275484991 

가 도움 무슨 일이 일어나고 있는지 설명해주십시오. 대신 부동 소수점의

+0

합계가 내장되어 있으므로 다른 이름을 사용해야합니다. –

답변

2

사용 정수 나누기 : 당신은 대체 구현을 찾고 있다면

x //= 10 
+0

글쎄, 와우! 그게 효과가 있었어. 두 운영자가 어떻게 다른지 설명해 주시겠습니까? –

+0

정규 구분은 부분 결과 ("정확한"구분)를 나타냅니다. 정수 나누기는 결과의 정수 부분 만 제공합니다 (가장 가까운 정수로 내림). –

+0

[파이썬에서 나누기에 사용할 때 '/'와 '//'의 차이점은 무엇입니까?] (0120-388-500) – Batsu

0

이 몰라,하지만 당신은 부동으로 건너 위험을 감수하지 않으려면이 더 간단 수 있습니다 포인트 토지.

# Python 2.7 
x = str(2**1000) 
print sum([int(i) for i in x]) 
+0

고마워요. 저는 파이썬에 익숙하지 않습니다. 그리고 저는 기묘한 C와 C++에서 왔습니다. 그래서 이것이 C에서 사용 된 것이므로 파이썬에서 같은 로직을 구현했습니다. –