Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обращение числа, из 0.5 => 50; 0.004 => 4000 и т.д. 
:(
    Опции темы
Royan
Дата 18.10.2004, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Стоит такая задача обратить вводимое число "А" (более правильной формулировки я не нашел) в число "B". "А" это всегда число образованное из 1/B, т.е. А = 1/B.

Задачу нельзя решить в лоб, если, например, взять B == 200, то (A = 1/200) == 0,005. Но поскольку всегда вводится А (т.е. подразумевается, что для получения 200 вводится не число 0.005, а 0.02) то B понятно что пользователь введя 0.02 получит вместо ожидаемого числа 1/0.02 == 50.

Если я только запутал данным объяснением свой вопрос, то в сущности мне нужно добиться результата описанного в теме сообщения, то есть из 5 тысячных получить 5 тысяч, а из 2 сотых получить 200 и т.д.

Это сообщение отредактировал(а) Royan - 18.10.2004, 21:25


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Domestic Cat
Дата 18.10.2004, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



Код

int x, k = 0;
cin >> x;
while (x < 1) { k++; x*=10;}
while (k > 1) {x*=10; k--;}



--------------------

PM   Вверх
manu
Дата 18.10.2004, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 14.10.2004

Репутация: 2
Всего: 3



Можно короче:

int p,q;

...

q=0;
while(p) {
q=q*10+p%10;
p/=10;
}
Добавлено @ 21:24
будет работать только для нуля :-!

int x, k = 0;
cin >> x;
while (x < 1) { k++; x*=10;} // не выполнится не разу при x>0
while (k > 1) {x*=10; k--;} // выполнится один раз, если x==0 и ни разу если x>0
Добавлено @ 21:29
Цитата(Royan @ 18.10.2004, 20:52)
Стоит такая задача обратить вводимое число "А" (более правильной формулировки я не нашел) в число "B". "А" это всегда число образованное из 1/B, т.е. А = 1/B.

Задачу нельзя решить в лоб, если, например, взять B == 200, то (A = 1/200) == 0,005. Но поскольку всегда вводится А (т.е. подразумевается, что для получения 200 вводится не число 0.005, а 0.02) то B понятно что пользователь введя 0.02 получит вместо ожидаемого числа 1/0.02 == 50.

Если я только запутал данным объяснением свой вопрос, то в сущности мне нужно добиться результата описанного в теме сообщения, то есть из 5 тысячных получить 5 тысяч, а из 2 сотых получить 200 и т.д.

А что тебе нужно, я так и не понял... :)))
PM   Вверх
Domestic Cat
Дата 18.10.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



Цитата(manu @ 18.10.2004, 12:20)
не выполнится не разу при x>0


Насколько я понял нужно для x < 1. Ну, добавить модуль для отрицательных чисел и случаи если |х| > 1.

Цитата(manu @ 18.10.2004, 12:20)
int p,q;

...

q=0;
while(p) {
q=q*10+p%10;
p/=10;
}


А это вообще не заработает. :)



Это сообщение отредактировал(а) Domestic Cat - 18.10.2004, 21:40


--------------------

PM   Вверх
manu
Дата 18.10.2004, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 14.10.2004

Репутация: 2
Всего: 3



Цитата(Domestic @ 18.10.2004, 21:34)
Цитата(manu @ 18.10.2004, 12:20)
не выполнится не разу при x>0


Насколько я понял нужно для x < 1. Ну, добавить модуль для отрицательных чисел и случаи если |х| > 1.

Не, надо поменять int x на double x.
Добавлено @ 22:17
Цитата(Domestic @ 18.10.2004, 21:34)
Цитата(manu @ 18.10.2004, 12:20)
int p,q;

...

q=0;
while(p) {
q=q*10+p%10;
p/=10;
}


А это вообще не заработает. :)


А почему?

Случай для дробей:

double p,q;
...

q=p;
while(p<1) {
q=q*100;
p*=10;
}
PM   Вверх
Adil'
Дата 19.10.2004, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер

Репутация: 6
Всего: 15



А может так будет по-проще?
Код
#include <math.h>
#include <values.h>

 double A=0.02;
 double B;
 if(fabs(A)>MINDOUBLE)
 {
   double dl=log10(fabs(A));
   int n=-2*((int)dl)+((dl<0)?2:0);
   B=A*pow(10,n);
 }
 else
   B=0.;


Это сообщение отредактировал(а) Adil' - 19.10.2004, 10:07


--------------------
Удачи
PM MAIL WWW   Вверх
Domestic Cat
Дата 19.10.2004, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



Цитата(manu @ 18.10.2004, 13:12)
Не, надо поменять int x на double x.


Согласен, думал о double, написал int.


--------------------

PM   Вверх
manu
Дата 19.10.2004, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 14.10.2004

Репутация: 2
Всего: 3



Domestic Cat, а я посмотрел на твой код, и решил что речь идет о целых :)))
PM   Вверх
Royan
Дата 26.10.2004, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Всем спасибо!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.