NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Neaktivní uživatel:25.6.2017 15:27

Ahoj, jsem naprostý začátečník[C#] v programování a nevím si rady s tímto problémem: Mám např. 8 ciferné číslo a já bych chtěl sečíst každou sudou cifru z toho čísla. Pro upřesnění - mám číslo 12121212 - chci sečíst každou sudou cifru - tzn. 2+2+2+2. Jak toho mohu dosáhnout v jazyce C#?
Děkuji předem za odpověď.

Odpovědět
25.6.2017 15:27
Neaktivní uživatelský účet
Avatar
00
Člen
Avatar
00:25.6.2017 15:41

Mělo by jít něco takového:

int innum = 12121212; // Číslo

int x = innum; // Vstup a mezivýsledek
if (((""+in).Length % 2) == 1) { // Je-li počet cifer lichý,
x *= 10; // ... vynásob deseti (přidej nulu na konec)
}

int outnum = 0; // Výsledek
while (x > 10) { // Dokud je víc než 10 (víc než 2 cifry)
outnum += (x % 10); // Přičti poslední cifru k out
x = (x / 100); // Odstraň dvě poslední cifry
}

Doporučuji otestovat na těchto číslech:
12345
23
2
3
12345678

--

S čísly menšími než 0 to nepočítá, je třeba je převést na kladná.
Nepoužívá desetinná čísla
Použití stringu není moc hezké, asi by to šlo lépe.
Editováno 25.6.2017 15:42
 
Nahoru Odpovědět
25.6.2017 15:41
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Ondrca:25.6.2017 17:39

Potřebuješ sečíst cifry, které jsou sudé, nebo cifry, které jsou na sudých pozicích?

Nahoru Odpovědět
25.6.2017 17:39
Zase jsem o něco chytřejší
Avatar
Tomáš Kubín:25.6.2017 21:11

Ahoj,
zhotovil jsem obě řešení. Zkus to, mělo by to sedět. Kdyby něco napiš.

  1. Zde sčítám každé číslo na sudé pozici.
int vstupniCislo = 1212121212;  // Vstupní číslo

           string cislo = Convert.ToString(vstupniCislo);

           int vysledek = 0;

           for (int i = 0; i < cislo.Length; i++)  //Získám charovou délku slova
           {
               if(i % 2 == 0)
               {
                   int tmp;
                   int.TryParse(cislo[i].ToString(), out tmp);
                   vysledek += tmp;
               }
           }

           Console.WriteLine("Výsledek je: " + vysledek);

           Console.ReadKey();
  1. Zde sčítám každé sudé číslo.
int vstupniCislo = 1212121212;  // Vstupní číslo

           string cislo = Convert.ToString(vstupniCislo);

           int vysledek = 0;

           for (int i = 0; i < cislo.Length; i++)  //Získám charovou délku slova
           {
               int tmp;
               int.TryParse(cislo[i].ToString(), out tmp);

               if (tmp % 2 == 0)   // Zda je čislo sudé
               {
                   vysledek += tmp;
               }
           }

           Console.WriteLine("Výsledek je: " + vysledek);

           Console.ReadKey();

Program funguje následovně:

  1. Zadám vstupní číslo.
  2. Udělám z něj string
  3. V cyklu jdu do délky toho stringu
  4. Vezmu z toho stringu číslo na pozici a převedu ho na int
  5. Hotovo
Editováno 25.6.2017 21:13
 
Nahoru Odpovědět
25.6.2017 21:11
Avatar
HONZ4
Člen
Avatar
Odpovídá na Tomáš Kubín
HONZ4:25.6.2017 22:23

dovolil bych si upravit tvé 1. řešení:

int vstupniCislo = 1212121212;  // Vstupní číslo
string cislo = Convert.ToString(vstupniCislo);
int vysledek = 0;

for (int i = 1; i < cislo.Length; i+=2)  //Získám charovou délku slova
{
    int tmp;
    int.TryParse(cislo[i].ToString(), out tmp);
    vysledek += tmp;
}

Console.WriteLine("Výsledek je: " + vysledek);
Console.ReadKey();
 
Nahoru Odpovědět
25.6.2017 22:23
Avatar
Radek Chalupa:26.6.2017 6:46

Myslím že to lze jednodušeji:

int soucet(int cislo)
{
string strCislo = cislo.ToString();
int vysl = 0;
for (int i = 1; i < strCislo.Length; i+=2)
{
vysl += (strCislo[i] - '0');
}
return vysl;
}

 
Nahoru Odpovědět
26.6.2017 6:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.