如何将c ++中的int拆分为单个数字?例如,我想将23分为2和3。
答案 0 :(得分:72)
鉴于号码12345:
5
是12345 % 10
4
是12345 / 10 % 10
3
是12345 / 100 % 10
2
是12345 / 1000 % 10
1
为12345 / 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)
这个问题的简单答案可以是:
我认为它会有所帮助。我使用简单代码:
#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;
}