Problem z zadaniem [C]

0

Witam, mam otóż takie zadanie :
Zrealizować sumowanie pary co najwyżej 80-cyfrowych liczby całkowitych ze znakiem ( nie mogą być one reprezentowane wewnętrznie nawet jako żaden typ liczbowy). Jestem początkujący proszę o wyrozumiałość.

  1. Stworzyłem strukturę ( zamiast char ma być bool czyli chyba coś takiego bool dodatnia =true )
  2. Stworzyłem wczytywanie liczb ( zamiast tego ma być funkcja, jakoś mi nie wychodzi to )
  3. Muszę posortować dane i sumować ( Tego kompletnie nie wiem, myślę że za pomocą tablic i sumować elementy 1do1 2do2 i analogicznie. Tylko jak jeśli jest minus przed liczbą.
  4. Podać wynik

Tutaj kawałek kodu którego stworzyłem
#include <stdio.h>
#include <stdlib.h>

int main()
{
struct Liczba
{
int cyfry[80];
char znak; /// bool " true or false "
int dlugosc;
};
printf("Podaj dlugosc pierwszej liczby: ");

struct Liczba p1;
scanf("%d",&p1.dlugosc);
int i;
for(i=0;i<p1.dlugosc;i++)
    {
    scanf("%d",&p1.cyfry[i]);
    }

printf("Podaj dlugosc drugiej liczby: ");

struct Liczba p2;
scanf("%d",&p2.dlugosc);
for(i=0;i<p2.dlugosc;i++)
    {
    scanf("%d",&p2.cyfry[i]);
    }

return 0;

}

0

nie mogą być one reprezentowane wewnętrznie nawet jako żaden typ liczbowy

to jak chcesz coś dodać skoro nie wiesz czy to liczba - char[] to też reprezentacja typu liczbowego jeśli ustalisz pewne konwencje.

Jedyny sposób bez przechowywania jaki jestem w stanie wymyślić to przechowywać tylko aktualne cyfry przez co całej liczby nigdy nie będziesz znał, ale musisz poprosisz użytkownika o podanie liczb od tyłu cyfra po cyfrze raz z jednej a raz z drugiej i wypisywać wynik na bieŻąco (Boże, widzisz takie błędy i nie grzmisz) bez przechowywania go (wynik też wypiszesz od tyłu).

Wydaje mi się, że lepiej jeśli jeszcze raz napiszesz co musisz zrobić tylko na przykładzie liczb o długości w systemie dziesiętnym max 4 i bez podawania żadnego kodu ani tłumaczenia nam na przykładzie kodu bo wydaje mi się, że możesz coś mieszać.

0

Dodam jeszcze że mogę używać tylko statycznych typów danych (tablice,struktury itd.).

0
lion137 napisał(a):

Tu jest algorytm dodawania: https://silentmatt.com/blog/2011/10/how-bigintegers-work/

Dzięki powinno się przydać tylko muszę to rozgryźć i przełożyć na C :)

0

#include <stdio.h>
#include <stdlib.h>
int main()
{
struct Liczba
{
int cyfry[80];
char znak; /// bool " true or false "
int dlugosc;
};
int x = 0;
int sum[81];

printf("Podaj dlugosc pierwszej liczby: ");

struct Liczba p1;
scanf("%d",&p1.dlugosc);
for(x=0; x<p1.dlugosc; x++)
{
    printf("Podaj cyfre: ");
    scanf("%d",&p1.cyfry[x]);
}

printf("Podaj dlugosc drugiej liczby: ");

struct Liczba p2;
scanf("%d",&p2.dlugosc);
for(x=0; x<p2.dlugosc; x++)
{
    printf("Podaj cyfre: ");
    scanf("%d",&p2.cyfry[x]);
}
int reszta = 0;
int k = 0;
int i = p1.dlugosc - 1;
int j = p2.dlugosc - 1;
for (; i>= 0 && j>= 0; i--, j--, k ++)
{
    sum [k] = (p1.cyfry [i] + p2.cyfry [j] + reszta)% 10;
    reszta = (p1.cyfry [i] + p2.cyfry [j] + reszta) / 10;
}
if (p1.dlugosc> p2.dlugosc)
{

    while (i>= 0)
    {
        sum [k ++] = (p1.cyfry [i] + reszta)% 10;
        reszta = (p1.cyfry [i--] + reszta) / 10;
    }

}
else if (p1.dlugosc < p2.dlugosc)
{
    while (j>= 0)
    {
        sum [k ++] = (p2.cyfry [j] + reszta)% 10;
        reszta = (p2.cyfry [j--] + reszta) / 10;
    }
}
else
{
    if (reszta> 0)
        sum [k ++] = reszta;
}

printf ("Wynik: ");
for (k--; k>= 0; k--)
    printf ("%d", sum [k]);

return 0;

}

Dodawanie liczy dobrze teraz problem z odejmowaniem i jeszcze na funkcje muszę pozamieniać wczytanie liczb, wczytanie wyniku

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