Škôlka jazyka C

Fórum o programovaní v jazyku C založené 3. januára 2012

Aktuálny čas je 20 Jan 2021, 00:31

Všetky časy sú v GMT + 1 hodina




Vytvoriť novú tému Odpovedať na tému  [ Príspevkov: 3 ] 
Autor Správa
 Predmet príspevku: Dátový typ pre veľké čísla
PoslaťNapísal: 05 Mar 2015, 18:33 
Offline
Školák
Školák

Registrovaný: 05 Mar 2015, 18:22
Príspevky: 17
Udelené body: 3 bodov
Získané body: 8 bodov
Zdravím, mám problém s týmto kódom:
Kód:
#include<stdio.h>
#include <stdint.h>
int main()
{
  int64_t i,zad_cisloint,cis_pism,j = 0,k,n;

  long double zad_cislor;
  char znak[26];
  char *zn;
  for(i = 0; i < 26;i++)
      znak[i] = (65+i);
  scanf("%llu",&n);
  char **retazec;
  retazec = (char **) malloc(n * sizeof(char *));
  for(i = 0; i < n; i++)
      retazec[i] = (char *) malloc(26 * sizeof(char));
  for(k = 0; k < n; k++){
  scanf("%llu",&zad_cisloint);
  zad_cislor = zad_cisloint;
  while((zad_cislor / 26) > 0){
        i = j++;
        zad_cisloint = (int)zad_cislor;
        cis_pism = zad_cisloint % 26;
        if(cis_pism == 0)
            cis_pism = 26;
        retazec[k][i] = znak[cis_pism-1];
        zad_cislor = (zad_cisloint-cis_pism) / 26;
  }
        retazec[k][j] = '\0';
        j = 0;
  }
  for(k = 0; k < n; k++){
      for(i = strlen(retazec[k]); i > 0; i--)
            printf("%c",retazec[k][i-1]);
      putchar('\n');
  }
  return 0;
}


Po zadaní čísla, ktoré označuje koľko ďalších čísiel zadám nasleduje výpis slova/písmena,ktoré pod zadaným číslom figuruje-zoradené podľa dĺžky a podľa abecedy. Teda napr. pre číslo 1 --> A 2 --> B 27 --> AA atď
avšak pre veľké čísla(väčšie ako cca 2 200 000 000) mi to nefunguje a to by som potreboval vyriešiť.Používam typ int64_t. Vedel by mi niekto poradiť? Ďakujem.


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
PoslaťNapísal: 06 Mar 2015, 07:34 
Offline
Stredoškolák
Stredoškolák
Obrázok užívateľa

Registrovaný: 06 Jan 2012, 19:26
Príspevky: 458
Bydlisko: pod Pátrovom
Udelené body: 228 bodov
Získané body: 21 bodov
Táto stránka by ti mala pomôcť:
http://www.cplusplus.com/reference/cstdint/
Ak chceš ešte väčšie čísla, musíš si vytvoriť vlastný dátový typ, ale ten by mal byť tvorený pomocou reťazca a výpočty by tam boli trochu zložitejšie.

_________________
kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor),
Skype: libcokamo, ICQ: 56312279
Ak treba, napíš mi na libcosenior@gmail.com. To mám v mobile a stále po ruke.


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
PoslaťNapísal: 06 Mar 2015, 10:42 
Offline
Školák
Školák

Registrovaný: 05 Mar 2015, 18:22
Príspevky: 17
Udelené body: 3 bodov
Získané body: 8 bodov
Po tom, ako som si rozobral kód kúsok po kúsku, tak som prišiel na to kde je chyba.
Kód:
 zad_cisloint = (int)zad_cislor;
V tomto bode som to premenil na základný typ int, ktorý také veľké čísla nepodporuje. Zmena na
Kód:
zad_cisloint = (uint64_t)zad_cislor;
to vyriešila


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
Zobraziť príspevky z predchádzajúceho:  Zoradiť podľa  
Vytvoriť novú tému Odpovedať na tému  [ Príspevkov: 3 ] 

Všetky časy sú v GMT + 1 hodina


Kto je on-line

Užívatelia prezerajúci fórum: Google [Bot] a 0 hostia


Rýchla úprava:
Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete zasielať súbory v tomto fóre

Hľadať:
Skočiť na:  
cron
Powered by phpBB® Forum Software © phpBB Group

Hosted by FreeSpace SK