如何知道整数中的位数
How to know the number of digits in an integer
我是编程新手,我想知道如何知道用户输入的整数中的位数?例如:用户输入一个像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;
}
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何知道整数中的位数
- 从 stdio 获取一行空格分隔的整数,而不知道它们是多少 (C++)
- 我不知道如何创建一个以数字/字母顺序打印出我的整数或字符串的程序
- 从没有强制转换的整数中获取指针。知道什么,但不知道如何
- 大整数增加,我知道理论..在实践中仍然生锈
- 如果我有一个固定大小的填充ascii数字的char数组,我知道它指的是一个无符号整数,那么将其转换为无符号整数的最快方法
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 有没有办法从 boost::any 中获取一个整数,如果您不知道原始类型是有符号的还是无符号的
- 为什么我得到这种输出,因为我知道数组中未初始化的整数元素的默认值是0
- 有可能知道整数类型中有多少位吗
- 矢量<string>以及映射<字符串,整数> 释放时可能失败? 想知道内存使用情况详细信息