Witam,
Mam sobie zmienną int powiedzmy o wartości 45463, i teraz pytanie czy da się jakoś pozbyć 2 pierwszych cyfr, tak żeby użyć w programie tyko tej reszty ?
Pozdrawiam
Witam,
Mam sobie zmienną int powiedzmy o wartości 45463, i teraz pytanie czy da się jakoś pozbyć 2 pierwszych cyfr, tak żeby użyć w programie tyko tej reszty ?
Pozdrawiam
Tak, wziąć resztę z dzielenia przez 1000
Tylko jak ? Bo modulo nie zwraca tego co trzeba.
Pozdrawiam
To chyba u ciebie, bo u mnie 45463%1000 zwraca 463
usunięcie dwóch pierwszych z której strony? może chodzi Ci o podzielenie przez 100? ;D
Nie, chodzi mi o to, że na przykład mam "1 % 3" i zwraca mi 1 a powinno 333333...
Pozdrawiam
Że niby co? o_O
reszta z dzielenia 1 przez 3 to jest 1 bo
1/3 = 0 plus 1 reszty
Tak też myślałem, ale jak można się dobrać do tego co jest po przecinku ?
Czy ty jesteś normalny? W pierwszym poscie opisałeś coś zupełnie innego, a teraz piszesz o czymś innym. Zdecyduj się!
Możesz to zamienić na stringa i traktować to jako symbole. Jak chcesz odciąć elementy po przecinku to wystarczy że zrobisz liczba - (int)liczba
Najedź sobie na górę strony i przeczytaj na głos nazwę działu. Tak jest to "Newbie" więc proszę nie obrażaj mnie, zwyczajnie źle sformułowałem pytanie.
Chodzi mi o to że dzielę przez sobie dwa inty a później wyświetlam to w formie ("%d,%d",całość,reszta).
Pozdrawiam
printf("%d, %d", pierwszy_int/drugi_int, pierwszy_int%drugi_int);
Karolaq napisał(a)
printf("%d, %d", pierwszy_int/drugi_int, pierwszy_int%drugi_int);
Otóż nie bo wyświetli dla na przykład 1 przez 3 0,1 a powinno 0,3333..
Chyba już znalazłem na to rozwiązanie, sprawdzę tylko i napisze.
Pozdrawiam
std::cout<<(double)1/3;
kopernik napisał(a)
std::cout<<(double)1/3;
Nie mogę użyć C++, musi być czyste C i nie mogę użyć też formatu double, float itp musi być tylko int, ale już wymyśliłem :)
Mam tylko jeszcze jedno pytanie mam sobie zmienią int na przykład: "5658745" jak mogę sobie znak po znaku przepisać do tablicy ?
Pozdrawiam
printf("%f",(float)1/3);
To jest tylko rzutowanie i możesz to zrobić w C.
Możesz to zrobić jeszcze tak:
printf("%f",1.0/3.0);
Co i tak jest jednoznaczne z zapisem wyżej..
Twoje następne pytanie.. Możesz to zrobić za pomocą div i mod czyli / i %.
W pętli..
reszta z dzielenia przez 10, to jedna cyferka, Liczba = liczba div 10.
i tak dopóki liczba!=0
A jak Sobie z tym poradziłeś? Na moje coś nas tutaj ściemniasz.
Nie ściemniam :)
Mam tak pytam się o ilość miejsc po przecinku i przypisuje do zmiennej X = pow(10,poprzecinku) i wtedy ułożyłem sobie taki wzór:
wynik (to przed przecinkiem) = liczba1 / liczba2
reszta = ((liczba1 - (wynik*liczba2)) * X) / liczba2
I zwraca mi ok tak jak chcę czyli dla 1 / 3 reszt 333 itp.
teraz tylko powalczę z przepisaniem tej zmiennej do tablicy i dam znać jak poszło.
Pozdrawiam
Zwraca coś innego bo X jest zmiennoprzecinkowy, więc cały iloraz też jest tak traktowany. Czyli i tak korzystasz floatów
Może podaj po prostu treść zadania bo coś mi tu nie podoba.
Program ma przyjmować trzy inty (ilość cyfr po przecinku, dzielną i dzielnik) a potem zaokrąglić wynik do zadanej ilości miejsc po przecinku i wyświetlić.
Moja wersja działa bez problemu na małych liczbach (na przykład 1/3, 247/2000 czy 259998 20000) i zaokrągla tak jak trzeba, ale tylko jak podam mu na przykład 5 miejsc po przecinku. Jak podam mu 100 miejsc lub więcej to dzieje się coś dziwnego bo reszta jest liczbą ujemną.
Pozdrawiam i bardzo proszę o pomoc :(
a no widzisz
stu miejsc po przecinku w żaden normalny sposób działania na liczbach nie otrzymasz
musisz zrobić pętlę i dzielić ręcznie tak jak dzieli się w słupku
algorytm sobie napisz sam, ma to wyglądać mniej więcej tak
13/7 = 1 (1,)
13%7 = 6
6 * 10 = 60
60/7 = 8 (1,8)
60%7 = 4
4 * 10 = 40
40/7 = 5 (1,85)
40%7 = 5
50/7 = 7 (1,857)
itd...
a iteracji ma być tyle ile chcesz miejsc po przecinku
Ok dziękuję, zaraz nad tym pomyślę i może się uda, ale mam jeszcze takie inne pytanie.
Rozpisałem sobie ten mój wzór na kawałki żeby lepiej było widać co jest nie tak i wygląda on tak:
reszta1 = wynik*dzielnik;
reszta2 = dzielna - reszta1;
reszta3 = reszta2 * ilosc;
reszta4 = reszta3 / dzielnik;
I teraz dla przykładu biorę sobie 9 miejsc po przecinku czyli zmienna ilosc = 9 000 000 000 i liczby 5 przez 14 tak więc:
reszta1 = 0 * 14 =0
reszta2 = 5 - 0 = 5
reszta3 = 5 * 9000000000 = 45000000000
reszta4 = 45000000000 / 14 = 3214285714
a tym czasem komputer wypluwa dla tych wartości takie wyniki:
reszta1 = 0
reszta2 = 5
reszta3 = -2147483648
reszt4 = -153391689
Dlaczego tak jest bo nie rozumiem ?
Pozdrawiam
Edit: Chyba już wiem, int nie może tego przechować. Zmieniłem na long long int i nie ma już wartości ujemnych.
to raczej podstawy informatyki
int ma 32 bity, przy czym pierwszy bit z lewej to bit znaku, a pozostałe 31 to liczba
może przechować tylko liczby do 31 bitów - czyli maksymalnie 2^31 - 1 = 2147483647
jeżeli spróbujesz wpisać do niego liczbę 2147483648 to wchodzisz na bit znaku i zamiast tego dostajesz liczbę ujemną -2147483648
i tak w kółeczko - liczba zawsze będzie w zakresie <-2147483648; 2147483647>
możesz wyrzucić bit znaku oznaczając int jako unsigned
- wtedy masz zakres <0; 4294967295> ale to nadal za mało żeby dostać 100 liczb po przecinku
// edit: unsigned long long int też Ci dużo nie daje bo zwiększa zakres "zaledwie" do 18 446 744 073 709 551 615 - jak widać to nadal za mało żeby przechować 100 cyfr
Teraz to mi się całkiem pomieszało :) Otóż mam do tego zadania napisaną sprawdzarkę w bashu. Ma 108 testów z czego 48 mój program przechodzi a resztę nie.
Otóż na przykład test o numerze 101 wpisuje takiej wartości:
Ilość dzieleń:8
Ilość miejsc po przecinku: 100000
Działenie1:99999999 100000000
Działenie2:100000000 99999999
Działenie3:9 10
Działenie4:1 99999999
Działenie5:99999999 1
Działenie6:19 99
Działenie7:1999 9999
Działenie8:100 111
Liczby zwracane są tak długie że nie mieszczą się na ekranie nawet, więc nie mam pomysłu jak dla takich wartości trzeba to zrobić ? Bo nawet long long int nie przechowa takiej zmiennej.
Pozdrawiam
Szukaj pod hasłami "długie liczby" czy "wielkie liczby" itp. oraz "algorytm dzielenia".
o ile rozumiem pytanie masz jakas liczbe
int liczba = 1234567890;
i chcesz pozbyc sie jakiejs ilosci cyfr z prawej lub z lewej. Proponuje przekonwertowac liczbe na tekst funkcja itoa(), a nastepnie uciac co tam chcesz i funkcja atoi() przekonwertowac z powrotem na inta :)