Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [C] Разбиваем число |
Автор: ressac 23.12.2006, 00:27 | ||
хай всем. ну вот у нас например есть число 1234, и нам надо отделить одну цифру от другой вот мой код, но он действует только для чисел которые не превышают 10-и цифорвый значения.
вся проблема в том что модуль (%) не хочет работать с double или float компилятор (я использую gcc) мне говорит "invalid operands to binary %", a long макс подериживает 10 значные значения ![]() как решить проблему ![]() спасиб всем за ранее ;) |
Автор: skyboy 23.12.2006, 01:58 |
обойти её с той точки зрения, что x % y == x - floor(x / y) * y |
Автор: ressac 23.12.2006, 02:34 |
skyboy, ничё не понял ![]() ![]() |
Автор: V.A.KeRneL 23.12.2006, 10:26 |
ressac, а что не понятно-то? ОСТАТОК_ОТ_ДЕЛЕНИЯ == ДЕЛИМОЕ - ЦЕЛАЯ_ЧАСТЬ[ОТ_ЧАСТНОГО]*ДЕЛИТЕЛЬ. Например, 10%3 = 10 - [10/3]*3 = 10 - 3*3 = 1. |
Автор: apook 23.12.2006, 12:34 |
datoi =datoi-((datoi /10) *10); //еквивалент datoi =datoi %10; |
Автор: Dov 23.12.2006, 12:58 | ||
Не понятно следующее. Есть число:
![]() |
Автор: Dov 23.12.2006, 13:21 | ||
Если это целые, то да. ![]() |
Автор: skyboy 23.12.2006, 15:15 |
в типе float уже низзя хранить целые рациональные числа? ![]() |
Автор: Oleg_Ci 23.12.2006, 15:30 | ||
Задача пустятская ![]()
|
Автор: Dov 23.12.2006, 15:57 | ||
Олег4, человеку нужно посчитать количество знаков после запятой, например:
![]() |
Автор: Oleg_Ci 23.12.2006, 16:03 | ||||
с исправлениями ![]()
Добавлено @ 16:11 Не, вот так надо ![]()
|
Автор: Dov 23.12.2006, 16:36 |
Олег4, хоть так, хоть так, всё равно не работает. ![]() |
Автор: Oleg_Ci 23.12.2006, 17:47 |
Всё работает. Вводим число -> 1.204 результат -> 1,2,0,4, количество цифр после запятой -> count = 3 У меня ms2003 и у меня работает ![]() |
Автор: Dov 23.12.2006, 18:20 |
Ну, тогда введи так: 22222.11111 |
Автор: ressac 23.12.2006, 18:47 |
В ЭТОЙ ТЕМЕ РЕЧЬ ИДЁТ О ЦЕЛЫХ ЧИСЛАХ, БЕЗ ДРОБЕЙ. если кто-то хочет ещё мозги подолбать с дробями то тут http://forum.vingrad.ru/topic-128228/0.html есть эта тема ![]() Олег4, твоя прога считает до 10 цифр но не более , не знаю что она делает ещё толком не вникал. А если я напишу ещё цифры после запятой то она начинает бесконечный цикл ![]() |
Автор: Dov 23.12.2006, 19:23 |
ressac, тогда ответь на один простой вопрос. В переменной какого типа ты хранишь то число, которое нужно разбить на цифры? ![]() |
Автор: ressac 23.12.2006, 19:36 |
храню в double так как в него может влезть больше чем 10 значное число... затем делю и переношу в long затем из него при помощи модуля вытаскиваю последнюю цифру и так по кругу, но когда мы перешагиваям через 10 цифру тут и начинаются все проблемы, понимаешь меня? |
Автор: Dov 23.12.2006, 20:46 |
ressac, а почему ты не хочешь хранить в символьной строке? |
Автор: ressac 23.12.2006, 21:40 |
Dov, ты про char? если да, то как я потом буду из чара вытаскивать это число что я ввел ? мне же потом с ним надо будет ещё и операции выполнять... вообще растолкуй свой метод, если не сложно, мне интересно. кстати сходи в тему с дробями там я выложил готовый исходник (+/- работает правильно правда иногда или на одну цифру больше даёт или меньше) ![]() и там-же кстати в середине темы, есть способ с чаром. |
Автор: Rockie 23.12.2006, 23:48 | ||||||
ressac, функцией strtol к примеру
|
Автор: ressac 23.12.2006, 23:50 | ||
вот доработал по теории всё должно быть хорошо ну выходить всё не так, иногда есть взбои, и всё потому что дроби врут ![]()
|
Автор: Dov 24.12.2006, 22:28 | ||||
ressac, вот тебе ответ на все твои вопросы:
|
Автор: ressac 25.12.2006, 00:19 |
Dov, спасиб. ;) жаль что не получилось как я хотел, но я всё-таки думаю что есть способ это сделать с реальными числами... без внедрения чара и тому подобных вещей. |