如何知道整数中的位数

How to know the number of digits in an integer

本文关键字:何知道 整数      更新时间:2023-10-16

我是编程新手,我想知道如何知道用户输入的整数中的位数?例如:用户输入一个像123456这样的数字,我怎么知道用户输入了6位数?我不想使用for循环来获得用户输入,因为我不希望用户在空格enter后输入每个数字。

现在,我正在将一个数字转换为一组数字,这样我就可以控制它们,但问题是我不知道我应该循环使用多少数字,因为我不知道数字中有多少数字。

我可以将用户的输入作为字符串,然后使用string.length并将其转换为数字数组吗?

#include <iostream>
using namespace std;
int main()
{
int N;
cin >> N;
while(N--)
{
int num;
cin >> num;
int arr[1000];
for (int i=0 ;i<???;i++)
{
arr.[i]=num%10;
num = num /10;
}
}
}

一种更简单的方法是将其转换为字符串,然后计算所述字符串的长度

#include <iostream>
#include <string>
using namespace std;  
int main()  {  
int n;
cin >> n;
string str = to_string(n);
cout <<"the length of" <<str << "is:" <<str.length() <<"n";  
}  

输入41就会打印出来。

41的长度是2

while (num != 0)
{
arr.[i]=num%10;
num = num /10;
}

是一种常见的模式,与您现有的模式非常接近。

尽管你可以按照你在问题中提到的和别人在评论中建议的来做,并将输入作为字符串,然后使用string.length

是的,您可以将用户的输入读取为std::string而不是int,然后您可以使用std::string::size()(或std::string::length()(来获取字符串中的字符数,例如:

#include <iostream>
#include <string>
int main()
{
std::string S;
std::cin >> S;
int arr[1000] = {};
for (size_t i = 0; i < S.size(); ++i)
{
arr[i] = (S[i] - '0');
}
return 0;
}

或者:

#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string S;
std::cin >> S;
int arr[1000] = {};
std::transform(S.begin(), S.end(), arr, [](char ch){ return int(ch - '0'); });
return 0;
}

无论哪种方式,如果需要,您都可以使用std::stoi()std::strtol()或其他类似函数,或者将std::string放入std::istringstream中,然后从中读取一个整数,来检查std::string是否表示有效整数。

否则,您可以将用户的输入读取为int,然后将其转换为std::string进行处理:

#include <iostream>
#include <string>
int main()
{
unsigned int N;
std::cin >> N;
std::string S = std::to_string(N);
int arr[1000] = {};
for (size_t i = 0; i < S.size(); ++i)
{
arr[i] = (S[i] - '0');
}
// or:
// std::transform(S.begin(), S.end(), arr, [](char ch){ return int(ch - '0'); });
return 0;
}

否则,如果你真的想在int中读取并直接循环通过它的数字,你可以使用更像这样的东西:

#include <iostream>
int main()
{
unsigned int N;
std::cin >> N;
int arr[1000] = {};
size_t i = 0;
while (N != 0)
{
arr[i++] = num % 10;
num /= 10;
}
return 0;
}
相关文章: