【发布时间】:2010-11-23 22:23:17
【问题描述】:
如何将 c++ 中的 int 拆分为单个数字?例如,我想将 23 拆分为 2 和 3。
【问题讨论】:
-
把它想象成一个脑筋急转弯。如果您仍然不知道该怎么做,请发布您尝试过的内容,人们可以发表评论。
标签: c++
如何将 c++ 中的 int 拆分为单个数字?例如,我想将 23 拆分为 2 和 3。
【问题讨论】:
标签: c++
给定数字 12345:
5 是 12345 % 104 是 12345 / 10 % 103 是 12345 / 100 % 102 是 12345 / 1000 % 101 是 @9876@34
我不会提供完整的代码,因为这看起来确实像家庭作业,但我相信你会明白这个模式。
【讨论】:
逆序数字提取器(例如,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
}
【讨论】:
以下方法可以解决问题
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;
}
}
}
【讨论】:
number /= 10 结束。
这个问题的简单答案可以是:
我认为它会有所帮助。我使用了简单的代码,例如:
#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;
}
【讨论】:
将其转换为字符串或 char[] 并在其上循环
【讨论】:
经典技巧是使用模 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;
}
【讨论】:
声明一个数组并像这样将单个数字存储到数组中
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;
}
【讨论】:
int n = 1234;
std::string nstr = std::to_string(n);
std::cout << nstr[0]; // nstr[0] -> 1
我认为这是最简单的方法。
我们需要使用 std::to_string() 函数将我们的 int 转换为字符串,以便它会自动使用我们的数字创建数组。我们可以简单地使用索引来访问它们——nstr[0] 将显示 1;
【讨论】:
从适合您平台上 int 的 10 的最高幂开始(对于 32 位 int:1.000.000.000),然后对其进行整数除法。结果是最左边的数字。从原始数字中减去这个结果乘以除数,然后以 10 的下一个较低的幂继续相同的游戏,并迭代直到达到 1。
【讨论】:
您可以使用一系列 x/10.0f 和 std::floor 操作来获得“数学方法”。 或者您也可以使用 boost::lexical_cast(the_number) 来获取一个字符串,然后您可以简单地执行 the_string.c_str()[i] 来访问单个字符(“字符串方法”)。
【讨论】:
我不一定推荐这个(使用数字而不是将其转换为字符串更有效),但它很容易并且有效:)
#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;
}
【讨论】:
int n;//say 12345
string s;
scanf("%d",&n);
sprintf(s,"%5d",n);
现在您可以通过s[0]、s[1] 等访问每个数字
【讨论】:
你可以数一数你想先打印多少位数
#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;
}
【讨论】:
根据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;
}
【讨论】:
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();
}
【讨论】:
#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;
}
【讨论】: