Как я могу разбить int в С++ на его одиночные числа? Например, я хотел бы разделить 23 на 2 и 3.
Как разбить int на его цифры?
Ответ 1
Учитывая число 12345:
5
- 12345 % 10
4
- 12345 / 10 % 10
3
- 12345 / 100 % 10
2
составляет 12345 / 1000 % 10
1
12345 / 10000 % 10
Я не буду предоставлять полный код, так как это, безусловно, выглядит как домашнее задание, но я уверен, что вы получите шаблон.
Ответ 2
Экстрактор цифр в обратном порядке (например, для 23 будет 3 и 2):
while (number > 0)
{
int digit = number%10;
number /= 10;
//print digit
}
Экстрактор цифр нормального порядка (например, для 23 будет 2 и 3):
std::stack<int> sd;
while (number > 0)
{
int digit = number%10;
number /= 10;
sd.push(digit);
}
while (!sd.empty())
{
int digit = sd.top();
sd.pop();
//print digit
}
Ответ 3
передайте его в строку или char [] и зациклируйте на ней
Ответ 4
Следующее выполнит трюк
void splitNumber(std::list<int>& digits, int number) {
if (0 == number) {
digits.push_back(0);
} else {
while (number != 0) {
int last = number % 10;
digits.push_front(last);
number = (number - last) / 10;
}
}
}
Ответ 5
Простым ответом на этот вопрос может быть:
- Прочитать номер "n" от пользователя.
- Использование While Loop Make It Not Not Zero.
- Возьмите модуль 10 из номера "n".. Это даст вам его последнюю цифру.
- Затем разделите число "n" на 10. Это удаляет последний номер числа "n", поскольку в int decimal part опущен.
- Отобразить номер.
Я думаю, это поможет. Я использовал Simple Code Like:
#include <iostream>
using namespace std;
int main()
{int n,r;
cout<<"Enter Your Number:";
cin>>n;
while(n!=0)
{
r=n%10;
n=n/10;
cout<<r;
}
cout<<endl;
system("PAUSE");
return 0;
}
Ответ 6
классический трюк заключается в использовании modulo 10: x% 10 дает вам первую цифру (т.е. цифру единиц). Для других вам нужно сначала делить (как показано многими другими сообщениями)
Вот небольшая функция, чтобы получить все цифры в векторе (что вам, похоже, нужно делать):
using namespace std;
vector<int> digits(int x){
vector<int> returnValue;
while(x>=10){
returnValue.push_back(x%10);//take digit
x=x/10; //or x/=10 if you like brevity
}
//don't forget the last digit!
returnValue.push_back(x);
return returnValue;
}
Ответ 7
Объявите массив и сохраните отдельные цифры в массиве, как этот
int num, temp, digits = 0, s, td=1;
int d[10];
cout << "Enter the Number: ";
cin >> num;
temp = num;
do{
++digits;
temp /= 10;
} while (temp);
for (int i = 0; i < digits-1; i++)
{
td *= 10;
}
s = num;
for (int i = 0; i < digits; i++)
{
d[i] = s / td %10;
td /= 10;
}
Ответ 8
Начните с наивысшей мощности десяти, которая вписывается в int
на вашей платформе (для 32 бит int
: 1.000.000.000) и выполняет целое деление на нее. Результат - самая левая цифра. Вычтите этот результат, умноженный на делитель от исходного числа, затем продолжите ту же игру со следующей меньшей мощностью десяти и итерации до тех пор, пока не достигнете 1.
Ответ 9
Вы можете просто использовать последовательность операций x/10.0f и std:: floor, чтобы иметь "математический подход". Или вы также можете использовать boost:: lexical_cast (the_number), чтобы получить строку, а затем вы можете просто сделать the_string.c_str() [i] для доступа к отдельным символам ( "строковый подход" ).
Ответ 10
Я не обязательно рекомендую это (более эффективно работать с числом, а не преобразовывать его в строку), но это легко и работает:)
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <boost/lexical_cast.hpp>
int main()
{
int n = 23984;
std::string s = boost::lexical_cast<std::string>(n);
std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "\n"));
return 0;
}
Ответ 11
int n;//say 12345
string s;
scanf("%d",&n);
sprintf(s,"%5d",n);
Теперь вы можете получить доступ к каждой цифре с помощью s[0]
, s[1]
и т.д.
Ответ 12
Вы можете подсчитать, сколько цифр вы хотите напечатать первым.
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int number, result, counter=0, zeros;
do{
cout << "Introduce un numero entero: ";
cin >> number;
}while (number < 0);
// We count how many digits we are going print
for(int i = number; i > 0; i = i/10)
counter++;
while(number > 0){
zeros = pow(10, counter - 1);
result = number / zeros;
number = number % zeros;
counter--;
//Muestra resultados
cout << " " << result;
}
cout<<endl;
}
Ответ 13
На основе ответа icecrime я написал эту функцию
std::vector<int> intToDigits(int num_)
{
std::vector<int> ret;
string iStr = to_string(num_);
for (int i = iStr.size() - 1; i >= 0; --i)
{
int units = pow(10, i);
int digit = num_ / units % 10;
ret.push_back(digit);
}
return ret;
}
Ответ 14
int power(int n, int b) {
int number;
number = pow(n, b);
return number;
}
void NumberOfDigits() {
int n, a;
printf("Eneter number \n");
scanf_s("%d", &n);
int i = 0;
do{
i++;
} while (n / pow(10, i) > 1);
printf("Number of digits is: \t %d \n", i);
for (int j = i-1; j >= 0; j--) {
a = n / power(10, j) % 10;
printf("%d \n", a);
}
}
int main(void) {
NumberOfDigits();
}
Ответ 15
int n = 1234;
std::string nstr = std::to_string(n);
std::cout << nstr[0]; // nstr[0] -> 1
Я думаю, что это самый простой способ.
Нам нужно использовать функцию std :: to_string() для преобразования нашего int в строку, чтобы он автоматически создавал массив с нашими цифрами. Мы можем получить к ним доступ просто используя index - nstr [0] покажет 1;
Ответ 16
Используй стандартный, Люк!
int reverse_int(int x)
{
string str = to_string(x);
reverse(begin(str), end(str));
try
{
if(x<0)
x = -stoi(str);
else
x = stoi(str);
}
catch(...) { return 0; }
return x;
}
Ответ 17
for (size_t i = 0; i < sizeof(num); ++i, num>>1)
{
std::cout << (num&1) << "\n";
}
Вы не указали базу.