Któregoś dnia mój nauczyciel chemii wyjaśniał nam notację naukową (używając małej liczby i mnożąc ją przez potęgę dziesięciu, aby łatwiej wyrażać duże liczby), co przywróciło mnie o kilka lat, kiedy się go nauczyłem. Po zapoznaniu się z podstawami zadaliśmy kilka typowych pytań matematycznych, z których niektóre były następujące:
W notacji naukowej reprezentuj:
a)
50000000 b) 120000000000000
c) 90000000000000000000000000000000000000
d) pi ^ e ^ i ^ j ^ k ^ std :: vector
...
z) 200
...
I pomyślałem: „Co? Powiedziano nam, że notacja naukowa została użyta, aby zwiększyć efektywność pisania dużych liczb, ale niektóre przypadki wcale nie są bardziej efektywne!”
Rozważ numer
300
i jego reprezentacja w notacji naukowej:
3x10^2
Co, naukowo zanotowana wersja faktycznie zajmuje więcej miejsca? Nie możemy tego teraz mieć, prawda? (Przestrzeń na ekranie jest cenna.)
Moglibyśmy sami ustalić, czy bardziej efektywne jest miejsce na zapisanie liczby w notacji naukowej, czy nie, lub ...
Zadanie
Twój program lub funkcja powinna przyjąć jako wartość wejściową pojedynczą liczbę dodatnią no dowolnym rozmiarze (do poziomu obsługiwanego przez Twój język) i wygenerować zanotowaną naukowo wersję liczby.
Jeśli jednak oryginalny numer n, po usunięciu końcowych zer i końcowego miejsca po przecinku, zajmuje mniej lub tyle samo znaków do wyświetlenia niż jego notowana naukowo wersja, należy nzamiast tego wydrukować ten oryginalny numer .
Twój kod musi być jak najkrótszy, ponieważ dane wyjściowe również muszą być tak krótkie, jak to możliwe.
Dane techniczne
Efektywna notacja naukowa jest zdefiniowana następująco:
bx10^e
bjest liczbą wejściową odpowiednio podzieloną przez potęgi 10, takie jak 1 <= b < 10. Ta liczba musi mieć wszystkie zera końcowe (i kropkę dziesiętną, jeśli jest wymagana), ale musi mieć dokładność oryginalnej liczby (do limitu dziesiętnego w twoim języku, oczywiście). Oznacza to, że 90000staje się 9, 13.500staje się 1.35, 0.000675staje się 6.75itd. Jeśli liczba ta zawiera więcej miejsc po przecinku, niż twój język może znieść, należy ją zaokrąglić do maksymalnej liczby miejsc po przecinku.
ejest wykładnikiem potęgi, do którego podniesiono dziesięć, że n = b x 10^e(pamiętaj, że liczba ta musi być ujemna, jeśli njest mniejsza niż 1). Liczba ta nie powinna mieć żadnych zer końcowych ani miejsca dziesiętnego (głównie dlatego, że jeśli nie jest liczbą całkowitą, coś jest nie tak ...).
Znaki x10^ muszą pozostać takie, jak w ciągu między bi e.
Przypadki testowe
Input -> output
1 -> 1
20 -> 20
3000000 -> 3x10^6
400000 -> 400000
0.008093 -> 0.008093
0.007835000000000 -> 0.007835
0.000003000000 -> 3x10^-6
0.00000065 -> 6.5x10^-7
0 -> 0
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Inne zasady i wyjaśnienia
- Zera końcowe (i / lub końcowe miejsce dziesiętne) nie są liczone do liczby znaków oryginalnej liczby wejściowej
n. Pamiętaj o tym w przypadkach takich jak przypadek testowy 6 - Możesz założyć, że jeśli liczba wejściowa jest mniejsza niż 1, zawsze będzie zaczynać się od 0 dla cyfry jedynek (jak w przypadkach testowych 5-8).
- Numer wejściowy nigdy nie będzie ujemny
- Wbudowane rozwiązania, które sprawiają, że wyzwanie jest trywialne, a standardowe luki są niedozwolone
- Końcowy znak nowej linii w wynikach jest OK
EDYCJA
Dzięki użytkownikowi 81655 za wskazanie przypadków testowych 7 i 8 miał niepoprawne moce dziesięciu. Naprawiłem je, więc upewnij się, że Twój kod ocenia je poprawnie.
e9000 -> 9e3
x10^. Byłoby to sporo przeróbek na pytanie, które nie wydaje mi się właściwe teraz, gdy zostało opublikowane
pi^e^i^j^k^std::vectorbyłby wynik dla danych wejściowych ?