» »

(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>:D 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.
"Life is hard; it's even harder when you're stupid."

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:

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…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] - Pointerji in ponovitve

Oddelek: Programiranje
51069 (785) windigo
»

C# program za pretvorbo v desetiško število z rekurzijo

Oddelek: Programiranje
81388 (1111) MrStein
»

Java

Oddelek: Pomoč in nasveti
141301 (926) shadeX
»

c++ naloge

Oddelek: Programiranje
92802 (2426) l0g1t3ch
»

[C/C++] unsigned long lala = -1;

Oddelek: Programiranje
51090 (1049) Vesoljc

Več podobnih tem