2014-04-10 4 views
0

나는 정규 정수로 동작하는 UnboundInteger 클래스를 구현하고 있습니다. 지원되는 크기 인 에 대해 양측에 제한이없는 임의의 큰 정수를 처리 할 수 ​​있습니다. 여기 언 바운드 정수 클래스

불행하게도 내가 밖으로 여기

오류

In [40]: reload(test) 
Out[40]: <module 'test' from 'test.py'> 

In [41]: a = test.UnboundInteger(1000000000000) 

In [42]: b = test.UnboundInteger(20000000000) 

In [43]: a + b 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-43-f96fb8f649b6> in <module>() 
----> 1 a + b 

/home/neel101/test.py in __add__(self, other) 
    17    temp = '0' + temp 
    18    temp = temp[-1] 
---> 19    carry = temp[-2] 
    20    result = temp + result 
    21 

IndexError: string index out of range 

또는이 문제에 대한 더 나은 방법을입니다 제발 도와주세요 오류를 디버깅 할 수없는 나는 내 코드

class UnboundInteger(object): 

def __init__(self, integer): 
    self.integer = str(integer) 


def __add__(self, other): 
    carry = '0' 
    temp = '0' 
    result = '' 

    if (len(self.integer) > len(other.integer)): 
     num_of_zeros = len(self.integer) - len(other.integer) 
     other.integer = '0' * num_of_zeros + other.integer 

    elif (len(self.integer < other.integer)): 
     num_of_zeros = len(other.integer) - len(self.integer) 
     self.integer = '0' * num_of_zeros + self.integer 

    for i in range(1, len(self.integer)+1): 
     temp = str(int(self.integer[-i]) + int(other.integer[-i]) + int(carry)) 
     temp = '0' + temp 
     temp = temp[-1] 
     carry = temp[-2] 
     result = temp + result 

    return UnboundInteger(result) 



@classmethod 
def from_int(cls, integer): 
    '''\ 
    Take in a integer and build the unbound integer object. 
    ''' 
    ub_integer = cls(integer) 
    return ub_integer 

입니다 . 저에게 알려주세요!

+3

을,이 프로젝트 또는 숙제 _need_합니까? 프로젝트의 경우, 파이썬의'long '타입을 사용하십시오. (보통'int'는 잘 작동 할 것입니다. 필요하면'long'으로 자동 변환됩니다.) ... python3은 더 좋습니다. 'int'는 get-go에서 임의의 크기를가집니다. – mgilson

+1

이것은 "학문적 인"연습 중 하나 여야합니다 ... –

+0

그래, 그것은 학문적 인 운동입니다! –

답변

1

임시 변수를 덮어 쓰는 중입니다.

temp = '0' + temp 
temp = temp[-1] 
carry = temp[-2] 

그것은 다음과 같이해야한다 : 호기심

temp = '0' + temp 
carry = temp[-2] 
temp = temp[-1]