Loading...
MarioDandarov avatar MarioDandarov 27 Точки

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

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

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

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

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 143 Точки

Задачата я реших преди около седмица точно по метода на 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.