Професионална програма
Loading...
+ Нов въпрос
MarioDandarov avatar MarioDandarov 27 Точки

(Visual C) Как да извлека цифри от произволно голямо число?

Имам проблем с една домашна от Уни-то. Дали са ми произволен вход, на който да умножа нечетните цифри и да ги извадя на конзолата.

Примери:
6223=>3
5468=>5
1576=>35
65795=>1575

Тагове:
1
Общи приказки
RoYaL avatar RoYaL Trainer 6846 Точки

Visual C?! Сигурен ли си, че пишете на такъв език?

 

Иначе:

 

- Намери как да раздробиш числото на съставните му числа - дали с деление или има вграден метод;

- Провери всяко едон от числата дали е нечетно;

- Запази го ако е така;

- Умножи запазените числа

1
ivaylo.yanchev.5 avatar ivaylo.yanchev.5 80 Точки

Не разбрах в кое точно се състои проблемът ти. В тази задача аз лично виждам два:

1) произволен вход - не знаеш точно колко е максимумът цифри в числото;

2) не знаеш как да извлечеш всяка от цифрите на числото;

 

По 1) очевидно няма да стане с int (или byte) digit1,2...n, защото не знаеш колко е n, максимумът въведени цифри. В този случай предполагам се ползва динамичен масив / лист, нещо, с което все още не съм се сблъсквал на C# и не мога да помогна в момента.

По 2) математическият подход да намериш цифрите на едно десетично число е като го делиш на 10 и взимаш остатъка, а резултатът от делението продължиш да делиш на 10 по същия начин толкова пъти, колкото цифри имаш в числото. В твоя пример за 6223:

6223 % 10 = 3 ( 6223 / 10 = 622)

622 % 10 = 2 (622 / 10 = 62)

62 % 10 = 2 (62 / 10 = 6)

6 % 10 = 6

Разбира се преди това трябва да намериш колко цифри имаш в числото, което става по сходен начин, но те интересува кога делението на 10 ще даде резултат по-малък от 1 (там ти е последната цифра).

И като съвет, недей да обръщаш число в стринг, за да търсиш цифрите по позиции. Много повече неща могат да се объркат - може да има минус, може да има десетична запетая/точка и т.н.

0
HPetrov avatar HPetrov 822 Точки

Кратко и просто решение, което се сещам е input-а ти да е стринг. После го прокарваш през един for цикъл, който ти проверява всеки индекс в стринга дали е число, и ако е - дали е нечетно. Ако е нечетно го умножаваш по предварително създадена променлива "int/long product =1;" и така всеки път като срещне нечетно число цикъла просто се умножава конкретното число по променливата.

1
MarioDandarov avatar MarioDandarov 27 Точки

Проблема ми е, че не е зададено колко е голямо числото, иначе знам как да извличам цифрите.

Със стринг е балъшко и 100% ще гърми при определени обстоятелства. Искам помощ да го направя с масив :)

0
HPetrov avatar HPetrov 822 Точки

Ако си правиш правилните проверки нито е балъшко, нито ще ти гърми. Другия вариант е с BigInteger но не знам дали има такова животно в C.

0
nikolay.dimov83 avatar nikolay.dimov83 142 Точки

Задачата я реших преди около седмица точно по метода на HPetrov и не гърми - има я в конкурсните на Телериг, ако не се лъжа - даде ми 100 от 100 на проверката.

Още повече, че ако използваш стринг ще ти сработи и при инпут от рода на "a23б4 dfgt1", а не само за въведени числа. Доколкото си спомням точно това беше единия от тестовете на bg-coder - не бях предвидил такъв случай и я преправях.

0
g.stoyanov avatar g.stoyanov 776 Точки

Ето това е метод който намерих в stackoverflow. Мисля че ще ти свърши работа.

 

Edit: Това е пример за C#, видях че ти търсиш за C. Можеш да видиш алгоритъма ако имаш затруднение при имплементацията пиши :).

0
MarioDandarov avatar MarioDandarov 27 Точки

Така ми крашва. Някой да знае защо?

0
Dekameron avatar Dekameron 481 Точки

Можеш да пробваш следното цък

 

 

Накратко да обясна:

1. Вкарвам входа в стринг.

2. Прокарвам всеки елемент от стринга дали е число (винаги е число в твоя случай).

3. Ако е число го вкарвам в промелива odd.

4. Всеки пък когато odd е нечетно num *= odd;

 

Дано съм ти помогнал smile

 

5
MarioDandarov avatar MarioDandarov 27 Точки

Благодаря ти :) Аз със C# нямам проблем. Уча в ТУ, всъщност вече не и ме помолиха за помощ, а както е известно вероятно на всички - там се учи C. Моето решение стана, просто бях забравил, че трябва да има 1 празен бит в масив и в случая исках 10-цифрено число и трябва да запаза масив от 11 елемента, а запазих само 10. Програмата се оправи и тръгна. Надявам се да не се занимавам вече с това :D

Иначе за C# бях видял някъде библиотека с полезни функции, включително и извличане на цифри, но не помня къде за жалост. Благодаря на всички :)

1