Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Jak to ugryźć. Najstarsza cyfra dziesiętna.

Ostatnio zmodyfikowano 2017-04-23 16:35
Autor Wiadomość
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.
P-160364
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! :)
P-160376
mokrowski
» 2017-04-22 22:18:14
C/C++
#include <iostream>
#include <cmath>

int main() {
    long value = 6986876823;
    std::cout << std::floor( value / std::pow( 10, std::floor( std::log10( value ) ) ) )
    << std::endl;
}
P-160378
Saran
» 2017-04-22 23:29:01
C/C++
#include <iostream>
#include <stdio.h>

int main()
{
    int value = 698676823;
   
    char ciag[ 10 ];
    sprintf( ciag, "%d", value );
    std::cout << ciag[ 0 ];
    return 0;
}

C/C++
#include <iostream>
#include <sstream>

int main()
{
    long value = 698676823;
   
    std::ostringstream ss;
    ss << value;
    std::cout << ss.str()[ 0 ];
    return 0;
}
P-160382
jankowalski25
» 2017-04-23 00:13:39
char ciag[ 10 ];
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.
P-160387
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.
P-160388
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.
P-160390
Rashmistrz
» 2017-04-23 01:52:31
Taka mała sztuczka z logarytmem dziesiętnym.
Z oczywistych powodów działa tylko dla dodatnich.

C/C++
// Example program
#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 );
}
P-160392
« 1 » 2
  Strona 1 z 2 Następna strona