当前位置: 首页 > 知识库问答 >
问题:

to_string().length()在C++中给出了错误的结果。谁能给我解释一下这种行为吗?

宋岳
2023-03-14
#include <iostream>
using namespace std;

int main()
{
    int n,t;
    cin>>n;

    for(int i=0;i<n;i++)
    {
        cin>>t;
        cout<<to_string(t).length();
    }
    return 0;
}

测试用例:
输入-123//正确
输出-3

intput-1111111111111111111111111111111111//输出不正确
-10

输入-11111//不正确
输出-1010

共有1个答案

薛晨
2023-03-14

这很可能是由cin尽可能多地读取int造成的。当您将111111111111111111111111分配给t时,请注意,1111111111111111111111超出了int的容量大小,甚至超出了long long int的容量。然后,对于固定输出,将endl语句链接到output语句的末尾,如下所示:

cout<

如果您坚持要使代码工作于超出容量的整数,那么您可能需要查看一些算术库,如GMP算术库

 类似资料:
  • 日安, 我有一个问题,在我的代码中,一个声明在函数之外有一个错误。 谢谢

  • 错误:任务“:app:CompileFlutterBuildDebug”执行失败。 进程“command”d:\flutter\bin\flutter.bat“已完成,退出值为非零%1 > 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获得完整的见解。

  • 假设我有一个代码,它也打印了一个星形图案(也就是说,如果我用“#”替换print方法中的字符串文字),就像下面从右到左的楼梯一样。 这实际上将打印每列k值的全部0,然后打印全部1,然后全部2,等等。对于i值,它将打印每列1,2,3,4,5,6,然后2,3,4,5,6,3,4,5,6,等等。 好的,为什么这里i的值不是从零开始的?我以为内部循环应该首先执行。

  • 我的任务是使用用户填充的int数组合并两个数组,我们必须假设用户最多有10000个输入,用户输入负数停止。然后将数组从最小到最大排序并打印出来。起初我以为这很容易,但当我完成时,我开始得到如下输出: 正如你所看到的,这六个是不合适的,我不知道如何修复它。这是源代码,我已经包括了大量的评论,因为我真的希望你们能帮助我尽你们最大的能力。如果可以使用相同的技术而不在代码中实现新的技术和方法,请这样做。我

  • 我在计算这条线的时间复杂度时遇到了麻烦。在我看来是二次O(n**2)。因为如果不使用列表理解,这里必须经过嵌套循环。

  • 问题内容: 我已经阅读了数百篇有关Java中“ this”的解释,但是我真的很难理解它。我正在并行学习android和java,我知道这样做比较难,但是我很喜欢。我被杀死的一件事是“ this”。我正在粘贴下面一次使用“ this”的教程中的代码。我本打算只编写一段代码,但希望尽可能提供帮助。 我正在寻找可以添加到笔记中的“ this”的良好解释。任何和所有帮助表示赞赏。提前致谢。 示例代码从下面