Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 20. 02. 2012 14:49

monytam
Zelenáč
Příspěvky: 1
Reputace:   
 

Vytáhnutí jednotlivých číslic z čísla

Dobrý den, potřeboval bych poradit s tímto úkolem, jedná se například o četnost daných číslic nebo nejvyšší/nejmenší z jednoho konkrétního čísla v C.

Offline

  • (téma jako nevyřešené označil(a) monytam)

#2 20. 02. 2012 15:12 — Editoval frank_horrigan (20. 02. 2012 15:23)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: Vytáhnutí jednotlivých číslic z čísla

Zdravím,

zkus si to číslo hodit na řetězec (pomocí itoa, nebo (já podobné věci dělám) pomocí sprintf), a testuj v cyklu ASCII hodnotu (když se podíváš na ASCII tabulku, tak víš, že číslice mají reprezentaci od 48 do 57, kde 48 = '0' a 57 = '9'), a v tom samém cyklu si přičítej, co potřebuješ (testuj zda číslice není větší než zatím největší nalezená, inkrementuj čítač číslic, jak je ctěná libost).

Tedy, taková ochutnávka:

Code:

#include <stdio.h>

int main()
{
   unsigned long cislo = 11546212; // to jsem si vymyslel, misto toho si napis treba logiku vstupu od uzivatele
   char cisloJakoRetezec[11] = {'\0'}; // dej majzla, at mas to pole dost velky, pokud pouzijes nejvetsi ("bezny") celociselny typ unsigned long, tak vis, ze jeho maximum je neco pres 4 miliardy, tedy deset cislic, pole o 11 prvcich tedy bude stacit
   sprintf(cisloJakoRetezec, "%d", cislo);
   
   int citacJednicek, citacDvojek = 0;
   char nejvetsiCisliceASCII = 0;
   for(int i = 0; i < 11; i++)
   {
       if(cisloJakoRetezec[i] = '1') citacJednicek++;
       if(cisloJakoRetezec[i] > nejvetsiCisliceASCII) nejvetsiCisliceASCII = cisloJakoRetezec[i];
      // dalsi logika, co s tim potrebujes
   }
   int nejvetsiCislice = atoi(nejvetsiCisliceASCII);
   printf("V zadanem cisle se nachazi %d jednicek, %d dvojek a nejvetsi cislice je cislice %d", citacJednicek, citacDvojek, nejvetsiCislice);
return 0;
}

Postačuje tak? Děkuji


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#3 25. 02. 2012 23:28

qazasd
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Vytáhnutí jednotlivých číslic z čísla

↑ frank_horrigan:

Nebo lze vyuzit deleni modulo 10ti a celociselne deleni 10ti... coz povazuju za cistci reseni nez vyuziti sprintf pro konverzi do retezce a zpetne urcovani cislice podle znaku.

Kod muze vypadat napr. takto

Code:

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
        if(argc != 2){
                fprintf(stderr, "Usage: %s <cislo>\n", argv[0]);
                return 1;
        }

        unsigned long cislo = atoi(argv[1]);
        unsigned char cetnost[10];
        unsigned char cislice;

        memset(cetnost, 0, sizeof(cetnost));

        do {
                cislice = cislo % 10;
                cislo /= 10;
                cetnost[cislice]++;
        }
        while(cislo);

        int i;
        for(i=0;i<=9;i++){
                printf("Cetnost cislice %d: %d\n", i, cetnost[i]);
        }

        return 0;
}

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson