Sumowanie dużych liczb (80 znaków)

0

Witam mam do zrobienia projekt o takiej treści:

Dla podanego zadania opracować projekt programu uwzględniający podział problemu na podproblemy oraz struktury danych. Projekt przedstawić do oceny. Zakodować program zgodnie z projektem. Uruchomić program i przeprowa­dzić jego testowanie. Ocenie podlega zarówno program jak i sposób i zakres testowania.

Wolno używać jedynie statycznych typów danych (tablice, struktury itd.).

Zrealizować sumowanie pary co najwyżej 80-cyfrowych liczb całkowitych ze znakiem (nie mogą być one reprezen­towane wewnętrznie nawet jako żaden typ liczbowy).

Zupełnie nie wiem jak się do tego zabrać, zalezy mi najpierw przede wszystkim na opracowaniu projektu i napasaniu na kartce jego treść.

1

Co już masz i z czym masz problem?
Jak tytułować wątki na forum?

0

Mam napisane pierwsze wprowadzanie tekstu:
*każda cyfra ma wartość 0-9
*liczba całkowita ze znakiem ma <= 80 cyfr
A teraz powinienem chyba napisać problem dodawania tego

0

Zadanie jest dość proste. Niech liczbę reprezentuje tablica 80 znaków. Dodawanie możesz zrobić tak jak robiłeś to w podstawówce - dodawać liczby na tej samej pozycji z przenoszeniem

0

Liczbę możesz reprezentować na przykład, jako strukturę tablicy przechowującej cyfry i znaku.
Do tego musisz dorobić funkcje stringToBignum(), bignumToString(), addBignums()
Dodawanie zrób tak jak w szkole pisemnie

3

Możesz zacząć od czegoś takiego:

const int MaxNumLen = 80;
const int MaxStringLen = MaxNumLen + 1;

struct TestCaseData
{
    char a[MaxStringLen ];
    char b[MaxStringLen ];
    char expectedSum[MaxStringLen];
};

const struct TestCaseData testData[] = {
    {
        "0",
        "0",
        "0"
    },
    {
        "1",
        "0",
        "1"
    },
    {
        "0",
        "1",
        "1"
    },
    {
        "6",
        "4",
        "10"
    },
    {
        "9999",
        "1",
        "10000"
    },
    {
        "1",
        "9999",
        "10000"
    },
    {
        "983452345932853457938475903475093674988647534853495738497658934539488",
        "475093674988647534853495738497658934539488983452345932853457938475043",
        "0" // policz sobie na wolfram alpha 
    },
};
const int testDataCount = sizeof(testData) / sizeof(testData[0]);

int main() {
    int failedCount = 0;
    int i;
    for (i = 0; i < testDataCount; ++i) {
         char result[MaxStringLen];
         int errorCode = largeNumebrSum(result, testDataCount[i].a, testDataCount[i].b);
         if (errorCode) {
               ++failedCount ;
               printf("Test failed, for input:\n"
                      "       a: %s\n"
                      "       b: %s\n"
                      "function failed with code: %d\n",
                      testDataCount[i].a,  testDataCount[i].b, errorCode);
               continue;
         }
         if (strcmp(testDataCount[i].expectedSum, result) != 0) {
               ++failedCount ;
               printf("Test failed, for input:\n"
                      "       a: %s\n"
                      "       b: %s\n"
                      "expected: %s\n"
                      "  actual: %s\n",
                      testDataCount[i].a,  testDataCount[i].b, testDataCount[i].expectedSum, result);
         }
    }
    if (failedCount == 0) {
         printf("\nAll test has passed!!!\n");
         return 0;
    }
    printf("\n%d test has failed!!!", failedCount);
    return 1;
}

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