Nacitanie velmi velkeho cisla – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nacitanie velmi velkeho cisla – C / C++ – Fórum – Programujte.comNacitanie velmi velkeho cisla – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Navi0
Newbie
6. 4. 2018   #1
-
0
-

Zdravim,

vedeli by ste mi prosim niekto poradit ako nacitat zo standardneho vstupu do premennej (najlepsie asi cez scanf) velmi velke cisla napr 60 miestne cislo. (ale aj väcsie)

Diky za rady.

Nahlásit jako SPAM
IP: 178.40.120.–
Navi0
Newbie
6. 4. 2018   #2
-
0
-

#1 Navi
a este som zabudol ma to byt v C.

Nahlásit jako SPAM
IP: 178.40.120.–
gna
~ Anonymní uživatel
1891 příspěvků
6. 4. 2018   #3
-
+1
-
Zajímavé

Podle toho, co s tím chceš dělat. Do standardních číselných datových typů se to samozřejmě nevejde, ale není problém to načíst jako string. Jestli s tou hodnotou chceš provádět výpočty, tak můžeš použít třeba GMP.

Nahlásit jako SPAM
IP: 213.211.51.–
Navi0
Newbie
6. 4. 2018   #4
-
0
-

#3 gna
no potrebujem s tym robit to ze spocitam ciferny sucet cisla dokym nedsotanem 1-ciferne cislo napr. ukazem na mensom cisle

147852-->27

27-->9

Nahlásit jako SPAM
IP: 178.40.120.–
Navi0
Newbie
6. 4. 2018   #5
-
0
-

#3 gna
mohol by si mi to nejak konkretnejsie vysvetlit ako by sa to dalo urobit prosim?

Nahlásit jako SPAM
IP: 178.40.120.–
Kit+15
Guru
6. 4. 2018   #6
-
0
-

#4 Navi
Tak tohle normálně načti jako string, neboť to není číslo, ale jen posloupnost číslic.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:98e9:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
gna
~ Anonymní uživatel
1891 příspěvků
6. 4. 2018   #7
-
+1
-
Zajímavé

   

char cislo[100];

scanf("%99s", cislo);

while (cislo[1]) {
	unsigned soucet = 0;
	for (int i = 0; cislo[i]; i++)
		soucet += cislo[i] - '0';
	sprintf(cislo, "%u", soucet);
}

printf("%s\n", cislo);
Nahlásit jako SPAM
IP: 213.211.51.–
Navi0
Newbie
6. 4. 2018   #8
-
0
-

#7 gna
wau, super diky moc :))

ale mam par otazok: preco tam je while(cislo[1])

a co znamena  cislo 99 v scanf("%99s", cislo); 

Nahlásit jako SPAM
IP: 178.40.120.–
gna
~ Anonymní uživatel
1891 příspěvků
6. 4. 2018   #9
-
+1
-
Zajímavé

Dokud je druhý znak stringu nenulový, tak je string delší než 1 znak. (Za předpokladu, že se něco načetlo. Kontrolu chyb jsem vynechal.)
To pole má 100 znaků, 99 ve scanfu znamená, že se má načíst maximálně 99 znaků (+ ukončovací nula).

Nahlásit jako SPAM
IP: 213.211.51.–
6. 4. 2018   #10
-
+1
-
Zajímavé

scanf("%99s", cislo); znamená, že načte 99 znaků ze vstupu. Že je to řetězec, funkce scanf na konec doplní znak s hodnotou 0x00. To znamená, že funkce naplní maximálně 100 znaků což je velikost pole, kam se řetězec ukládá. Je to hlídání meze pole a ochrana před zápisem za pole do paměti, která mi nepatří.

cislo[1] - víceciferné číslo bude mít na této pozici znak, jednociferné hodnotu 0x00. Funkce sprintf(cislo, "%u", soucet); vytváří mezivýsledek uložený jako řetězec na stejné místo jako zadané číslo (zadané číslo se tím ztratí) Takže sčítá cifry tak dlouho, dokud nedostane jednociferný součet

Nahlásit jako SPAM
IP: 195.178.67.–
Navi0
Newbie
6. 4. 2018   #11
-
0
-

Velmi pekne dakujem za rady

A dalo by sa to nejako spravit aj keby ze chcem nacitat cislo co ma 2 miliony cifier?? lebo to sa uz do pola nezmesti ci ?

Nahlásit jako SPAM
IP: 178.40.120.–
6. 4. 2018   #12
-
0
-

Otázka je, zda by se z klávesnice tolik znaků dalo zadat. Pokud by byl vstup ze souboru, tak takové množství znaků možné je. Pak je možné načítat a zpracovávat po částech. I při 2 mil. cifer by pak na součet cifer měl stačit bez problémů int. 

hu

Ještě pozn: pokud je int veliký alespoň 32 bitů. 

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý