dodawanie dużych liczb

Odpowiedz Nowy wątek
2006-11-28 21:41
wafcio496
0

Mam zrobić program, który będzie dodawał do siebie dwie duże liczb. Zakres liczb - od 1 do 10100. Algorytm już napisałem, ale muszę wysłać go przez internet na podstrone spoja . I system uznaje mi tylko pierwszą próbkę, przykład podany w zadaniu. Druga próbka zawiera liczby rzędu 109. A trzecia liczby do 10^100. Jakby ktoś mógłby mi pomóc w znalezieniu błędu w moim programie to byłbym bardzo wdzęczny. Osobie która będzie chętna mi pomóc wyśle program na PW. Nie chce programu umieszczać tutaj na forum bo nie wiem jak to pozniej będzie potraktowane przez system spoj, gdyby znleźli tego posta.

Pozostało 580 znaków

2006-11-29 07:25
0

akurat woj zakres, uzyj, sprawdzone:

http://carramba.homelinux.org/ftp/4programmers/vlong.zip

bo nie sadze aby komukoliwek chcialo sie szukac bledu w programie do ktorego nie podales bezposredniego linka.


Linuksa, czy innego Uniksa, można opisać za pomocą logiki boolowskiej a nie za pomocą prawdopodobieństwa.

'System szesnastkowy jest wspaniały! W skali od 1 do 10 daję mu E'

extreme safety for Ubuntu:
sudo echo -e 'Defaults targetpw\nDefaults timestamp_timeout=0' >> /etc/sudoers

Pozostało 580 znaków

2006-11-30 15:47
wafcio496
0

W sumie to nawet moge juz umieścić kod, wprawdzie system nie przeszedł mi ostatniego testu dla liczb do 10^100, ale zaliczyl 2 pierwsze testy. Pojawiło się to wczesniej na spoju a pozniej tutaj, wiec nie powinno byc problemu ...

#include <stdio.h>
#include <string.h>

int main ()
    {
    int t=0,i,j,l1Len,l2Len,m,p=0,l1p=0,l2p=0;
    char l1[101],l2[101],w[102];
        scanf("%d",&t);
    for(i=0;i<t;i++)
        {
        scanf("%s %s",l1,l2);
        m=101;
        l1Len=strlen(l1);
        l2Len=strlen(l2);   
        while(l1Len>0 || l2Len>0)
            {
            if(l1Len==0)
                l1p=0;
            else
                l1p=(int)l1[l1Len-1]-48;
            if(l2Len==0)
                l2p=0;
            else
                l2p=(int)l2[l2Len-1]-48;
            w[m]=(char)((l1p+l2p+p)%10)+48;
            p=(l1p+l2p+p)/10;
            if(l1Len>0) l1Len--;
            if(l2Len>0) l2Len--;
            m--;
            }
        if(p>0)
            {
            p=p+48;
            w[m]=(char)p;
            m--;
            }
        p=0;
        for(j=m+1;j<102;j++)
            printf("%c",w[j]);
        printf("\n");
        }
    return 0;
    }

A więc to jest kod, i nie działa mi on dla liczb do 10100, dla liczb do 109 działa.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0