Forum » Programiranje » (težava) long long v C
(težava) long long v C
robcek23 ::
Naloga je da na vhodu dobim 2 števili, npr:
123456789087654321 72315
In potem moraš z števkami iz drugega števila, v vsaki vrstici izpisat toliko številk prvega števila, začenši z leve strani
tu je rešitev npr
1234567 (7 števk, kot kaže prva števka drugega števila)
89 (2 števki, kot kaže druga števka drugega števila, itd...)
087
6
54321
No in sem nardil programcek, ki deluje za primere z int, ampak problem je da je vhod(prva številka) lahko na intervalu od 1 do 1018, torej mi v primeru ki sem ga podal zgoraj stvar nedeluje
Sem kar nekaj časa porabil, zamenjeval z int z long long ampak mi nikakor ni ratalo...morda kakšen namig, kako bi lahko popravil da deluje ne le z int ampak tudi z long long?
123456789087654321 72315
In potem moraš z števkami iz drugega števila, v vsaki vrstici izpisat toliko številk prvega števila, začenši z leve strani
tu je rešitev npr
1234567 (7 števk, kot kaže prva števka drugega števila)
89 (2 števki, kot kaže druga števka drugega števila, itd...)
087
6
54321
No in sem nardil programcek, ki deluje za primere z int, ampak problem je da je vhod(prva številka) lahko na intervalu od 1 do 1018, torej mi v primeru ki sem ga podal zgoraj stvar nedeluje
#include <stdio.h> #include <math.h> int main() { int prvoStevilo; scanf("%d ", &prvoStevilo); int stevilo = prvoStevilo; int stevec = 0; int stStevk; int tempStevec; //preštejem število števk v prvem številu while(stevilo>0) { stevilo = stevilo / 10; stevec++; } tempStevec = stevec; //da lahko odštevam števke potem while (1) { stStevk = getchar() - '0'; //dobim števko ki jo potrebujem iz drugega števila if (stStevk == -38) { break; } printf("%d\n", (int)(prvoStevilo / pow(10, (tempStevec - stStevk)))); prvoStevilo %= (int)pow(10, (tempStevec - stStevk)); tempStevec -= stStevk; } return 0; }
Sem kar nekaj časa porabil, zamenjeval z int z long long ampak mi nikakor ni ratalo...morda kakšen namig, kako bi lahko popravil da deluje ne le z int ampak tudi z long long?
Invictus ::
Uporabi string.
Ne rabiš int.
Gre za string šiftanje. Dve for zanki ti rešita nalogo.
Ne rabiš int.
Gre za string šiftanje. Dve for zanki ti rešita nalogo.
"Life is hard; it's even harder when you're stupid."
http://goo.gl/2YuS2x
http://goo.gl/2YuS2x
robcek23 ::
Dovoljena je zgolj uporaba operacij nad celimi števili.
Tako da nekako bi bilo treba z long long, samo nevem kako to izpeljati D:
Tako da nekako bi bilo treba z long long, samo nevem kako to izpeljati D:
Pogij ::
En način kako bi to lahko rešil je, da najprej rešiš, kako bi izpisal v obratnem vrstnem redu. Torej najprej izpišeš zadnjih 5 cifer in jih odstraniš iz prve številke. Nato izpišeš zadjno od preostalih številk in jo odstraniš in tako naprej. Ko imaš to napisano pa lahko uporabiš rekurzijo (privzemam da že poznaš), s čimer dosežeš, da se ti izpišejo v pravilnem vrstnem redu.
technolog ::
Dovoljena je zgolj uporaba operacij nad celimi števili.
Zakaj potem uporabljaš funkcijo pow?
technolog ::
#include <iostream> using namespace std; typedef unsigned long long ull; ull pow10(int p) { ull ret = 1; for(int i = 0; i < p; ++i) ret *= 10; return ret; } int main() { ull a, b; cin >> a >> b; int len = 0; for(ull b2 = b; b2 != 0; b2 /= 10) len++; for (int i = len; i != 0; i--) { ull a2 = a; ull b2 = b; for (int j = 1; j < i; ++j) { int cur = b2 % 10; b2 /= 10; a2 /= pow10(cur); } cout << a2 % pow10(b2 % 10) << endl; } }
Zgodovina sprememb…
- spremenil: technolog ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] - Pointerji in ponovitveOddelek: Programiranje | 1140 (856) | windigo |
» | C# program za pretvorbo v desetiško število z rekurzijoOddelek: Programiranje | 1463 (1186) | MrStein |
» | JavaOddelek: Pomoč in nasveti | 1354 (979) | shadeX |
» | c++ nalogeOddelek: Programiranje | 2849 (2473) | l0g1t3ch |
» | [C/C++] unsigned long lala = -1;Oddelek: Programiranje | 1158 (1117) | Vesoljc |