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
Zdravim,
Uz delsi dobu premyslim nad problemem jak "zkratit" vstupni hodnotu v C. Jedna se o problematiku kdy uzivatel zada nejake cislo:
Vstup: 000000098706
... nemuzu prijit na algoritmus ktery by z tohoto vstupu ulozil pouze to cislo 9876 a pritom ty nuly na zacatku vstupu ignoroval.
Vstup: 00000098706
Vystup: 98706
Predem dekuji za jakekoliv reakce a vasi trpelivost :)
Offline
Já bych to řešil asi takto:
Načíst vstup do stringu(pole charů)
Pak bych procházel od začátku, dokud bych nenarazil na číslo jiné než 0, to přidal do dočasného pole charů.
Z dočasného pole bych pomocí funkce atoi zkonvertoval string na int.
Offline
A když už je vstup jednou v řetězci (třeba čtením od uživatele z klávesnice, to je jedno), proč nepoužít standardní sscanf() nebo nějakou jeho secure-obdobu?
#include <stdio.h> int main(void) { int i; char c[] = "000314"; sscanf(c, "%d", &i); printf("%d", i); return 0; }
Offline
Při jedné úloze jsem řešil úplně stejný problém, vyřešil jsem to algiritmem, který "posouval" dané pole doleva, dokud byla na první pozici nula. Implementace následovně:
if (pole[0]=='0') while (pole[i]=='0') i++;
if(i!=0)
{
for(j=0; pole[i]!='\0'; i++,j++)
pole[j] = pole[i];
pole[j] = '\0';
}
Offline
Jinak, pokud můžeš použít plusplusové vymoženosti, tak si includni iostream, a vstup můžeš načíst pomoci objektu std::cin do intu, a std::cin ti rovnou první (nevýznamný) nuly ořízne sám o sobě....
tvrdíš, že to chceš v čistém C, kde samozřejmě cin a jeho příetížený operátor >> není, tak pak ta knihovní funkce atoi() ... pokud pracuješ reálnými (double, float, long double), tak použiješ atof()
Offline
#include <stdio.h> #include <string.h> int main() { char ret[] = "00000098706"; int delka = strlen(ret); int cislo = 0; for(int i = 0; i < delka; i++) { cislo = cislo * 10 + (ret[i] - '0'); } printf("%d", cislo); return 0; }
Offline