![](https://static.goldenline.pl/user_photo_basic.jpg)
konto usunięte
Temat: rząd liczby [C]
w jaki sposób sprawdzić rząd podanej liczby. w jaki sposób zapisać poniższe założenie?Rzad(n) jest to najmniejsza liczba 10k taka, że n < 10k
Na przykład Rzad(1) = Rzad (9) = 10, Rzad(10) = Rzad(99) = 100 itd.
konto usunięte
Marcin Staniszczak Programista Python
Marcin Staniszczak edytował(a) ten post dnia 18.11.11 o godzinie 10:44
#include <math.h>
int intlen(float number) {
int length = 0;
while(number > 0) {
number = number/10;
length++;
}
return length;
}
rzad = pow(10, intlen(n))
konto usunięte
Marcin Staniszczak Programista Python
Jakub Wojt:
W sumie nie jest w C...
double logValue= Math.Log(param, 10);
double result = Math.Pow(10, Math.Ceiling(logValue)));
Piotr
Głudkowski
Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...
#define MAX_LEVEL=100000000; // zeby był jawny warunek
long Rzad(long n)
{
for (long level = 10; level < MAX_LEVEL; level = level * 10)
if (n < level)
return level;
return -1; // za duża liczba, zadziałał warunek z MAX_LEVEL
}
konto usunięte
long Rzad(long n)
{
int result = 1;
while((result*=10) < n){}
return result;
}
konto usunięte
Jakub Wojt:
I kto tu kombinuje ... ;)
long Rzad(long n)
{
int result = 1;
while((result*=10) < n){}[/quote]> return result;[quote]}
konto usunięte
A czyj kod się zawiesi dostając na wejście n=LONG_MAX?:P
Piotr
Głudkowski
Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...
Piotr
Głudkowski
Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...
Jakub Wojt:
I kto tu kombinuje ... ;)
long Rzad(long n)
{
int result = 1;
while((result*=10) < n){}[/quote]> return result;[quote]}
long Rzad(long n)
{
int result = 1;
while((result*=10) < n);
return result;
}
konto usunięte
Piotr Głudkowski:
Jakub, pytanie ma naprawdę sens :)
Ja już kilkanaście lat temu przestałem ufać argumentom funkcji i generalnie danym zewnętrznym (a programuję zawodowo ponad 20 lat).
Jeden 'if' nie boli, a pozwala zaoszczędzić czasem i kilka nocy.
To jest kwestia nawyków - tak, jak wychodząc ze sklepu mówisz "Do widzenia" - chociaż nie trzeba ;) (a może nie mówisz?)
W/g mnie olewanie takich rzeczy to bardzo zły i szkodliwy zwyczaj.
konto usunięte
[...]
A to można prościej:
long Rzad(long n)
{
int result = 1;
while((result*=10) < n);[/quote]> return result;[quote]}
Klamerki po while są do niczego nie potrzebne (w C# również).
konto usunięte
Jakub Wojt:sizeof()?
ok. to załóżmy, że n = 2 ^ 256 :>
Kto na to zrobi "MAX_LEVEL" ?
Rafał Ciepiela Programista
Jakub Wojt:Możesz rozwinąć?
Piotr Głudkowski:
Jakub, pytanie ma naprawdę sens :)Jeden 'if' nie boli, a pozwala zaoszczędzić czasem i kilka nocy.
'if'y' bolą... właśnie w związku z tym powstało coś takiego jak modelowanie obiektowe ... ale to tak tylko na marginesie.
konto usunięte
long Rzad(long n)
{
long result = 1;
while(result < n)
result *= 10;
return result;
}
#include <iostream>
#include <cassert>
using namespace std;
template <int Rz> struct Rzad {
static const int value = (10 > Rz)? 10 : 10 * Rzad<Rz/10>::value;
};
template <> struct Rzad<0> {
static const int value = 10;
};
template <> struct Rzad<1> {
static const int value = 10;
};
int main()
{
cout << "Rzad(1) = " << Rzad<1>::value << endl;
cout << "Rzad(2) = " << Rzad<2>::value << endl;
cout << "Rzad(22) = " << Rzad<22>::value << endl;
cout << "Rzad(222) = " << Rzad<222>::value << endl;
}
konto usunięte
konto usunięte
Możesz rozwinąć?Piotr Głudkowski:
Jakub, pytanie ma naprawdę sens :)
Jeden 'if' nie boli, a pozwala zaoszczędzić czasem i kilka nocy.
'if'y' bolą... właśnie w związku z tym powstało coś takiego jak modelowanie obiektowe ... ale to tak tylko na marginesie.
Paweł Grzegorz
Kwiatkowski
Architekt
oprogramowania,
Ericsson
Piotr L.:
Nikt jeszcze chyba nie podał wersji z szablonami - podobnie jak z logarytmami czas wykonania O(1):
(przykład na to na ile można to zrobić sposobów)
konto usunięte
Paweł Grzegorz Kwiatkowski:
Piotr L.:
Nikt jeszcze chyba nie podał wersji z szablonami - podobnie jak z logarytmami czas wykonania O(1):
(przykład na to na ile można to zrobić sposobów)
O(1) ale chyba po ukonkretnieniu szablonu? W runtime (tzn. program prosi o podanie liczby na wejściu), chyba nie będzie to O(1) ? :)
Mateusz
Herych
Arch Linux TU,
Student PK
Następna dyskusja: