[#1] Typ danych
Stawiam pierwsze kroki w C. Chcę napisać program, który będzie operował na 30 cyfrowych liczbach. Już na początku mam problem, bo nie wiem jaki typ danych w tym przypadku określić (po którejś tam liczbie program już nie potrafi dodawać - wyświetla głupoty). Kolejna sprawa, w jaki sposób dokonać zamiany typu danych (np. z tekstowych na liczbowe i odwrotnie)?
[#2] Re: Typ danych

@mailman, post #1

atof, atoi, itoa, itof, sprintf etc
[#3] Re: Typ danych

@mailman, post #1

Stawiam pierwsze kroki w C. Chcę napisać program, który będzie operował na 30 cyfrowych liczbach.

Zadeklaruj sobie jakieś zmienne; long do 30 cyfr zdecydowanie wystarczy. ;)

long a,b;

Kolejna sprawa, w jaki sposób dokonać zamiany typu danych (np. z tekstowych na liczbowe i odwrotnie)?

char buforek[64];
long a;

//"konwersja" liczby na tekst
a = 123456789;
sprintf(buforek,"%ld",a);
printf("%s",buforek);


//konwersja tekstu na liczbe:
sprintf(buforek,"12323132");
a = atol(buforek);
printf("%ld,a);


Oczywiście to tylko wycinki programu, które trzeba zamknąć wewnątrz jakiejś procedury, np. w main()

[#4] Re: Typ danych

@MinisterQ, post #3

zadeklaruj sobie jakieś zmienne; long do 30 cyfr zdecydowanie wystarczy.

long a,b;


No i tak mam, lecz program głupieje przy dodawaniu jeżeli wprowadzę liczbę 11-sto cyfrową.

#include <stdio.h>

main()
{
long numer;
scanf("%ld", &numer);
numer = numer + 10;
printf("%ld", numer);
}

Dla liczby 1234567812 działanie jest prawidłowe i wynik wychodzi 1234567822, lecz dla liczby 12345678123 wychodzi już jakaś głupota na minusie.
[#5] Re: Typ danych

@mailman, post #4

Bo long wystarcza do zapisu liczb o maksymalnie 10 znakach (od -2 mld do 2 mld). W Twoim przypadku pomogłyby jedynie 64 bity - very long.
[#6] Re: Typ danych

@mailman, post #4

dodawanie jest wykonywane poprawnie, tylko printf je wyświetla jako liczbę ze znakiem.

Swoją drogą - po co Ci takie liczby? ;)

[#7] Re: Typ danych

@MinisterQ, post #6

Albo i faktycznie jest tak, że long jest zbyt krótki...
Nigdy nie korzystałem z takich dużych liczb. ;)

[#8] Re: Typ danych

@MinisterQ, post #6

Swoją drogą - po co Ci takie liczby?

Chcę napisać program, który będzie potrafił wyliczyć liczbę kontrolną rachunku bankowego.

Czy jest jakiś sposób, aby działać na tak dużych liczbach (30 cyfr)? Very long? Czy to jest w ogóle do zadeklarowania?
[#9] Re: Typ danych

@mailman, post #4

A właśnie - nie napisałeś na jakich liczbach chcesz operować, tzn. całkowitych, zmiennoprzecinkowych, dodatnich, ujemnych...
[#10] Re: Typ danych

@mailman, post #8

Na upartego można ten problem rozwiązać tworząc strukturę:

struct liczba
{
ULONG s;
ULONG m;
};

gdzie s - to "starsza", bardziej znacząca część liczby, zaś m - to "młodsza", mniej znacząca. Dodatkowo można byłoby dorzucić do powyższej struktury pole: "BOOL znak;", które określałoby, czy mamy do czynienia z liczbą dodatnią, czy też ujemną.

Żeby to jednak zaczęło działać jak należy, musiałbyś napisać sam wszystkie funkcje, czyli dodawanie, odejmowanie itp. Poza tym powyższe rozwiązanie nie zapewniałoby obsługi liczb zmiennoprzecinkowych.
[#11] Re: Typ danych

@rzookol, post #2

Przy 30-to cyfrowych to nie nada .... Albo biblioteka bigNum, albo
samemu trzeba cos podobnego napisać

[#12] Re: Typ danych

@gucio, post #10

Operuję na liczbach całkowitych, lecz dalsza część zadania sprowadza się do podzielenia 30-sto cyfrowego molocha przez 97 i określenie reszty z tego dzielenia...
[#13] Re: Typ danych

@mailman, post #12

To znaczy wprowadzam liczbę całkowitą (nieujemną), czyli w efekcie to naturalną, lecz dalsza część działań skutkuje otrzymaniem liczby wymiernej lub nawet niewymiernej...
[#14] Re: Typ danych

@gucio, post #5

to sie zwie w C99 long long, badz _int64, niektóre kompilatory
przyjmują to jako __int64... tu nie ma standardu

[#15] Re: Typ danych

@mailman, post #1

Witam

proponuje zbudowac taką strukture
#define MAX 30

struct superint {
  enum znak { PLUS, MINUS };
  char liczba[MAX];
}


I na niej zbudować odpowiednie funcje dodaj, odejmij, mnozenie i dzielenie.
Cały czas mowa oczywiście o liczbach całkowitych. W razie problemów daj znak.

pozdrawiam

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem