2016-05-28 5 views
-4

Например, 42556. Как определить первую цифру, если я не знаю числа цифр в номере? Я не мог найти алгоритм, который мне подходит! (Я имею в виду, чтобы определить 4 в 42556)Как определить первую цифру числа, не зная числа цифр? C++

+0

@MikeDunlavey я подумал, что, так я определить номер последнего (6) –

+0

@MikeDunlavey будет не то, что даст вам последняя цифра, 6 в этом случае? – nicomp

+1

** последний ** в названии, ** первый ** в вопросе = мгновенный downvote. – LogicStuff

ответ

1

Допуская a это номер входа.

#include <iostream> 
#include <cmath> 
using namespace std; 

int main() { 
    long a = 42556; 
    long num; 
    num=floor(log10(a))+1; 
    //cout<<num<<" "<<"\n"; //prints the number of digits in the number 

    cout<<a/(int)pow(10,num-1)<<"\n"; //prints the first digit 
    cout<<a%10<<"\n";     //prints the last digit 

    return 0; 
} 

Живая демо here.

+0

Спасибо всем за ответ на мой вопрос! –

+1

я видел u answerinfg много вопросов latley при переполнении стека –

1

итеративно разделить на 10, пока результат не будет меньше 10.

num = 42556 
while num > 9 
    num = num/10 
+0

Предполагая, что номер находится в базе10 –

+0

@nicomp thx man –

0

Попробуйте это:

int firstdigit(int n) { 
      int x = n; 
      while(n != 0) { 
      x = n%10; 
      n = n/10; 

      } 
     return x; 
    } 
+0

thank u vey much –

+0

@DragosStamatin: Существует лучший способ поблагодарить при переполнении стека. Вы можете ответить/принять ответ –

+0

@drescherjm: Спасибо, что указали это. Это была глупая ошибка, которую я сделал –

1

Вы можете продолжать разделить его на 10 до тех пор, пока вы достигли последней цифры:

int lastDigit(int n) { 
    n = abs(n); // Handle negative numbers 
    int ret = n; 
    while (n > 0) { 
     ret = n % 10; 
     n /= 10; 
    } 
    return ret; 
} 
1

Все ответы предполагают, что у вас есть целое число. Но в целом, вы можете сначала получить целочисленную форму с помощью функции floor из <cmath>, т.е.

#include <cmath> 
int getlastdigit(double number) 
{ 
    long long n = (long long)floor(number); 
    while(n > 9) 
     n /= 10; 
    return n; 
}