2011-12-09 5 views
0

저는 입력을 문자열로 계산하도록 요청 받았기 때문에 결과가 문자열이어야하는 긴 숫자를 계산할 수 있습니다. 추가 부분을 시도했지만 두 개의 숫자가 다른 길이로 작동하지 않습니다. 누군가 내 코드가 잘못되어 어떻게 해결할 수 있는지 말해 줄 수 있습니까? 또한 어떻게이 원리를 사용하여 나눌 것인가에 대한 아이디어.C가있는 문자열에 대한 수치 연산

i = strlen(first); 
j = strlen(second); 
x = 0; 

while(1) 
{ 
    z = (first[i-1] - 48) + (second[j-1] - 48) + carry; 
    carry = z/10; 
    result1[x] = z%10 + 48; 

    x++; 
    i--; 
    j--; 

    if(i==0 && j==0) 
    { if(carry!=0) 
     result1[x] = carry + 48; 
     break; 
    } 
} 

i = strlen(result1); 

for (i = 0, j = strlen(result1)-1; i < j; i++, j--) 
    { 
    c = result1[i]; 
    result1[i] = result1[j]; 
    result1[j] = c; 
    } 

puts(result1); 
+1

찾고있는 검색어는 "[tag : bignum]"입니다. – dmckee

+5

'- 48'라고 말하지 마십시오. '-'0 '이라고 말하십시오. –

답변

2

각 문자열에서 최하위 숫자로 합계를 시작해야합니다. 합계가 9를 초과하는 경우, 다음 더 중요한 자리 합계로 1을 수행합니다. 당신이 종이에서하는 것처럼. 이것은 또한 각 문자열 (숫자)의 길이를 알 수 있도록 물건을 정리하고 더 짧은 숫자 앞에 '암시 적 0'을 처리해야한다는 것을 의미합니다.

+0

아, 암시 적으로 0입니다. 그래서 그들은 길이가 같아 지도록 문자열에 0을 추가하는 다른 루프를 권장할까요? – user1090633

+0

문자열에 추가하지 말 것을 권합니다. 문자열을 만들고, 복사하고, 제로 패드해야합니다 (그리고 멀리 던지십시오). 나는 측정을 수행하지 않았지만 문자열의 앞 (가장 중요한 자리)에 도달했으면 가장 많이 될 것임을 알면서 0을 추가하는 것보다 빠르면 놀랄 것입니다. 다른 문자열의 나머지 자릿수에 캐리를 추가하고 캐리가있는 동안에 만 나머지 자릿수는 '9'입니다. 그렇지 않으면 선행 문자 만 복사하면됩니다. –

0

i 또는 j 중 하나가 0이거나 음수이면 작동하지 않습니다. 두 문자열이 모두 소비 될 때까지 루핑을 계속하려면? :를 사용하여 안전하지 않은 배열에 액세스하지 않도록 할 수 있습니다. 루프의 시작 부분에서 i와 j를 감소시키는 것이 더 쉬울 수도 있습니다.

if(i==0 && j==0) 

i! = j 일 경우에는 작동하지 않습니다. 루프를 종료하는 더 좋은 방법을 찾아야합니다. (위의주의 깊은 조건 논리를 사용하면 캐리가 0이 될 때까지 루프를 계속 진행할 수도 있습니다.)