繁体   English   中英

如何知道 integer 中的位数

[英]How to know the number of digits in an integer

我是编程新手,我想知道,我怎么知道用户输入的 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()或其他类似 function 或将std::string std::string std::istringstream然后从中读取 integer 。

否则,您可以将用户的输入读取为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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM