Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Перевод чисел в формат с фиксированной точкой


Автор: Kefir 11.11.2004, 20:45
Задача заключается в переводе чисел из стандиртного вида в обычный (т.е. из 1,2335*10^3 получить 1233,5) + округление
Дана мантисса (1<=|a|<10), дана экспонента (b<=200), дано число k, определяющее округление (округление до 10^k)

Хорошо бы соображения какие-то трезвые, а то я совсем апутался уже. А если примерик на С++ будет - я буду без ума от счастья

Автор: podval 11.11.2004, 21:04
Модератор: Название темы должно отражать ее суть!
Потрудитесь придумывать сами заголовки для тем!

Автор: maxim1000 12.11.2004, 00:32
ну так в чем проблема?
Код

int func(double a,int b)
{
 double result=1;
 while(b>0)
 {
   result*=a;
   b--;
 }
 return (int)result;
}

Цитата
стандиртного вида в обычный

звучит smile

Автор: val 12.11.2004, 10:32
maxim1000, а почему у тебя результат типа int. Мне кажется, что double должен...

Автор: podval 12.11.2004, 11:18
Кажись, по условию задачи надо результат выдавать так: целая часть, дробная часть и округление. Все три могут быть int.

Автор: val 12.11.2004, 11:30
Цитата
Кажись, по условию задачи надо результат выдавать так: целая часть, дробная часть и округление. Все три могут быть int.


Вроде наоборот, целая часть, дробная часть и округление - входные данные, выход - результирующее число действительного типа...

Автор: maxim1000 12.11.2004, 11:36
упс... не заметил k...
ну тогда можно после подсчета переменной result сделать так:
Код

if(k<0)
{
 int c;
 for(c=0;c<-k;c++)
   result*=10;
 result=(int)result;
 for(c=0;c<-k;c++)
   result/=10;
}
else
{
 int c;
 for(c=0;c<k;c++)
   result/=10;
 result=(int)result;
 for(c=0;c<k;c++)
   result*=10;
}

и возвращать, конечно, сам result

Автор: podval 12.11.2004, 12:04
Цитата(val @ 12.11.2004, 12:30)
Цитата
Кажись, по условию задачи надо результат выдавать так: целая часть, дробная часть и округление. Все три могут быть int.


Вроде наоборот, целая часть, дробная часть и округление - входные данные, выход - результирующее число действительного типа...

Нет, дано: мантисса, экспонента, округление.
Надо получить: целую часть и дробную часть с учетом округления.
Видимо, вывести результат надо как double, а так интовые вещи получаются.

Вот для наглядности:

http://sevntu.com.ua/conference/virt/Materials/Shkil/text1/tema1/img/13grid2.gif

http://sevntu.com.ua/conference/virt/Materials/Shkil/text1/tema1/img/13grid1.gif

Автор: Kefir 12.11.2004, 17:30
Немного проясню ситуацию на примерах:



1. дано:
1,265387 * 10^4
k = 2

решеие:
1. 1,265387 * 10^4 = 12653,87
2. k=2 -> округляем до 10^k, т.е. до сотен:
12653,87 -> 12700

Ответ: 12700



2. дано:
1,265387123 * 10^4
k = -2

решеие:
1. 1,265387123 * 10^4 = 12653,87123
2. k=-2 -> округляем до 10^k, т.е. до сотЫХ:
12653,87123 -> 12653,87

Ответ: 12653,87




2. дано:
1,86 * 10^-2
k = -2

решеие:
1. 1,86 * 10^-2 = 0,0186
2. k=-2 -> округляем до 10^k, т.е. до сотЫХ:
0,0186 -> 0,02

Ответ: 0,02

Щас буду пробовать решать 6)

Автор: Kefir 12.11.2004, 17:44
Кстати, во входящем файле мантисса записана не через точку, а через Запятую... и в выходной файл надо вывести через запятую...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)