f(9, 11) = 10;
f(121, 199) = 150;
f(1, 9999) = 5000;
есть моя медленная реализация (долго на больших, сильно удаленных друг от друга числах):
int round(const int &I1, const int &I2)
{
register int i1 = I1;
register int i2 = I2;
int result = -1;
//основа всех круглых чисел
register int cel[3];
cel[0] = 1;
cel[1] = 2;
cel[2] = 5;
int znak = 1;
if(i2<0)
{
int sw = i1;
i1 = -i2;
i2 = -sw;
znak = -1;
}
// ноль - самое круглое число
if(i1 < 0 && i2 > 0 || i1 == 0 || i2 == 0 )
result = 0;
else
{
// в общем случае делим каждое из чисел, расположенных
//между заданными, на круглые из массива (пока делятся)
register int count = 0;
register int j=0;
do
{
register int i = i1;
register int cnt = 0;
do
{
if(i%cel[j] == 0)
{
cnt ++;
result = i;
}
i++;
count = cnt;
} while (cnt < 1 && i < i2);
j++;
if(j == 3)
{
for(int k=0; k<3; k++)
cel[k] *= 10;
j=0;
}
} while (count > 0);
}
return result*znak;
}
вопрос - КАК сделать это быстрее?