[C] Jak to ugryźć. Najstarsza cyfra dziesiętna.
Ostatnio zmodyfikowano 2017-04-23 16:35
Ridos Temat założony przez niniejszego użytkownika |
[C] Jak to ugryźć. Najstarsza cyfra dziesiętna. » 2017-04-22 18:00:46 Witam Nie chciałem wrzucać prośby bez zaczęcia zadania, ale nawet nie wiem jak to ugryźć, a po pierwsze nie rozumiem do końca polecenia, a wiec: Napisz program, który wczytuje liczbę naturalną n i wyświetla jej najstarszą (pierwszą od lewej) cyfrę dziesiętną.
Proszę o wskazówki. |
|
bombatom69 |
» 2017-04-22 21:06:01 Trzeba wyznaczyć pierwszą cyfrę od lewej w reprezentacji dziesiętnej. np. 254 - zapisane w systemie dziesiętnym, pierwsza cyfra to 2 w systemie szesnastkowym to FE, więc pierwsza cyfra to F.
Do roboty! :) |
|
mokrowski |
» 2017-04-22 22:18:14 #include <iostream> #include <cmath>
int main() { long value = 6986876823; std::cout << std::floor( value / std::pow( 10, std::floor( std::log10( value ) ) ) ) << std::endl; }
|
|
Saran |
» 2017-04-22 23:29:01 #include <iostream> #include <stdio.h>
int main() { int value = 698676823; char ciag[ 10 ]; sprintf( ciag, "%d", value ); std::cout << ciag[ 0 ]; return 0; }
#include <iostream> #include <sstream>
int main() { long value = 698676823; std::ostringstream ss; ss << value; std::cout << ss.str()[ 0 ]; return 0; }
|
|
jankowalski25 |
» 2017-04-23 00:13:39 A co, jeśli int będzie 64-bitowy? Albo otrzyma wartość ujemną, chociażby - 1234567890 i nie zmieści się na dziesięciu znakach? @Ridos: Zakładam, że musisz samodzielnie to napisać, bez nadużywania gotowych funkcji ze standardowych bibliotek. W takim przypadku po prostu dzielisz liczbę przez dziesięć (lub inną podstawę systemu liczenia) aż do otrzymania zera. Wystarczy zapamiętać ostatni niezerowy wynik i go wypisać. Ewentualnie jeszcze zmienić znak przy ujemnej liczbie. 1. Dla jednocyfrowych liczb po prostu wypisujesz wynik. 2. Jeśli liczba ma więcej, niż jedną cyfrę, to kasujesz ostatnią z nich (dzielenie) aż do otrzymania liczby jednocyfrowej. |
|
Saran |
» 2017-04-23 00:32:01 @up racja, można by zwiększyć rozmiar tablicy. Ujemnej wartości raczej nie będzie dla liczb naturalnych.
Przypadkowo podałem też nieco zły kod w tym pierwszym. |
|
maly7 |
» 2017-04-23 01:15:26 Jak napisał jankowalski25, dziel liczbę przez 10 dopóki będzie większa od 9. for(; liczba >= 10; liczba /= 10 ); Po tej pętli zmienna liczba będzie pierwszą cyfrą zmiennej liczba przed wykonaniem pętli. |
|
Rashmistrz |
» 2017-04-23 01:52:31 Taka mała sztuczka z logarytmem dziesiętnym. Z oczywistych powodów działa tylko dla dodatnich. #include <math.h> #include <stdio.h>
int main() { int foo, bar; scanf( "%i", & foo ); bar = floor( log10( foo ) ); bar = pow( 10, bar ); foo /= bar; printf( "%i\n", foo ); }
|
|
« 1 » 2 |