Например, 42556
. Как определить первую цифру, если я не знаю числа цифр в номере? Я не мог найти алгоритм, который мне подходит! (Я имею в виду, чтобы определить 4 в 42556)Как определить первую цифру числа, не зная числа цифр? C++
ответ
Допуская 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.
Спасибо всем за ответ на мой вопрос! –
я видел u answerinfg много вопросов latley при переполнении стека –
итеративно разделить на 10, пока результат не будет меньше 10.
num = 42556
while num > 9
num = num/10
Предполагая, что номер находится в базе10 –
@nicomp thx man –
Попробуйте это:
int firstdigit(int n) {
int x = n;
while(n != 0) {
x = n%10;
n = n/10;
}
return x;
}
thank u vey much –
@DragosStamatin: Существует лучший способ поблагодарить при переполнении стека. Вы можете ответить/принять ответ –
@drescherjm: Спасибо, что указали это. Это была глупая ошибка, которую я сделал –
Вы можете продолжать разделить его на 10 до тех пор, пока вы достигли последней цифры:
int lastDigit(int n) {
n = abs(n); // Handle negative numbers
int ret = n;
while (n > 0) {
ret = n % 10;
n /= 10;
}
return ret;
}
Все ответы предполагают, что у вас есть целое число. Но в целом, вы можете сначала получить целочисленную форму с помощью функции floor
из <cmath>
, т.е.
#include <cmath>
int getlastdigit(double number)
{
long long n = (long long)floor(number);
while(n > 9)
n /= 10;
return n;
}
@MikeDunlavey я подумал, что, так я определить номер последнего (6) –
@MikeDunlavey будет не то, что даст вам последняя цифра, 6 в этом случае? – nicomp
** последний ** в названии, ** первый ** в вопросе = мгновенный downvote. – LogicStuff