如何将int拆分为数字?

时间:2010-11-23 22:23:18

标签: c++

如何将c ++中的int拆分为单个数字?例如,我想将23分为2和3。

16 个答案:

答案 0 :(得分:72)

鉴于号码12345:

512345 % 10
412345 / 10 % 10 312345 / 100 % 10 212345 / 1000 % 10 112345 / 10000 % 10

我不会提供完整的代码,因为这肯定看起来像家庭作业,但我相信你会得到这种模式。

答案 1 :(得分:8)

反向订单数字提取器(例如,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.front();
    sd.pop();
    //print digit
}

答案 2 :(得分:2)

将其强制转换为字符串或char []并循环播放

答案 3 :(得分:2)

以下将做到这一点

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;
    }
  }
}

答案 4 :(得分:2)

这个问题的简单答案可以是:

  1. 从用户那里读取数字“n”。
  2. 使用While循环确保它不是零。
  3. 取数字“n”的模数10 ..这将给你最后的数字。
  4. 然后将数字“n”除以10 ..这将删除最后一位数字 “n”因为在int小数部分被省略。
  5. 显示数字。
  6. 我认为它会有所帮助。我使用简单代码:

    #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;
    }
    

答案 5 :(得分:1)

经典技巧是使用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;
}

答案 6 :(得分:1)

声明一个数组并将单个数字存储到数组中,如下所示

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;

}

答案 7 :(得分:0)

以适用于您平台上的int的最高10的幂开始(对于32位int:1.000.000.000)并执行整数除法。结果是最左边的数字。减去此结果乘以原始数字的除数,然后继续使用下一个较低幂10的相同游戏并迭代直到达到1。

答案 8 :(得分:0)

你可以使用一系列x / 10.0f和std :: floor操作来获得“数学方法”。 或者您也可以使用boost :: lexical_cast(the_number)获取字符串,然后您可以简单地执行the_string.c_str()[i]来访问各个字符(“字符串方法”)。

答案 9 :(得分:0)

我不一定推荐这个(使用数字而不是将其转换为字符串更有效),但它很容易且有效:)

#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;
}

答案 10 :(得分:0)

int n;//say 12345
string s;
scanf("%d",&n);
sprintf(s,"%5d",n);

现在,您可以通过s[0]s[1]

访问每个数字

答案 11 :(得分:0)

您可以计算首先要打印的位数

#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;

}

答案 12 :(得分:0)

基于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;
}

答案 13 :(得分:0)

    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();
}

答案 14 :(得分:0)

int n = 1234;
std::string nstr = std::to_string(n);
std::cout << nstr[0]; // nstr[0] -> 1

我认为这是最简单的方法。

我们需要使用std :: to_string()函数将int转换为字符串,以便它将使用我们的数字自动创建数组。我们可以简单地使用索引来访问它们-nstr [0]将显示1;

答案 15 :(得分:-1)

#include <iostream>

using namespace std;

int main()

{


int n1 ;

cout <<"Please enter five digits number: ";
cin >> n1;

    cout << n1 / 10000 % 10 << " ";
    cout << n1 / 1000 % 10 << " ";
    cout << n1 / 100 % 10 << " ";
    cout << n1 / 10 % 10 << " ";
    cout << n1 % 10 << " :)";   

cout << endl;

return 0;
}