我的矢量只接受 10 位数字,我怎样才能让它更多?[已结束]

my vector only takes in 10 digits how can i make it more? [closed]

提问人:Nikola 提问时间:4/18/2023 最后编辑:tadmanNikola 更新时间:4/18/2023 访问量:77

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

7个月前关闭。

我一直在玩一些代码,尝试一些东西,我想制作一个程序,可以接受任何数量(或至少 100 位)数字,然后将它们相加,但令我沮丧的是,出于某种原因,它只显示 10,我不知道为什么。我尝试了很多东西,但没有帮助。

我尝试更改向量的大小,将 int 变成 long long int,或者尝试从互联网上获取一些东西,但没有任何帮助。

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
    vector<long long int> number;
    long long int av;
    cin >> av;
    for (int i = 0; i != 342; i++) {
        double fool = pow(10, i);
        int lol = int(fool);
        long long kik = (av / lol);
        int c = kik % 10;
        if (c > 0)
            number.push_back(c);
    }
    int hah = 0;
    for (int j = number.size() - 1; j >= 0; j--) {
        if (number[j] > 0) {
            cout << number[j] << endl;
            hah = hah + number[j];
        }
    }
    cout << hah << endl;
}
C++ 向量 IOstream CMATH

评论

5赞 user4581301 4/18/2023
pow(10, i);变大了。真的很大。远远超过了保持速度的能力。int
0赞 Thomas Matthews 4/18/2023
要消除该功能,请尝试以下操作: .这是一种运行电源方法。积分类型更高效、更准确。大多数处理器可以在一条指令中执行乘法运算,而调用至少需要 4 条指令。powuint32_t fool = 1u; for (/*...*/) { /*...*/ fool = fool * 10u; }pow()
1赞 Sam Varshavchik 4/18/2023
任何使用两个整数调用的程序从根本上都是有缺陷的。您可能会惊讶地发现,这并不完全是 100。pow()pow(10, 2)
2赞 Thomas Matthews 4/18/2023
您可能想投资一个大数字库。查找编译器的数值限制
1赞 user4581301 4/18/2023
我认为您需要非常清楚地向我们解释算法,以便我们了解您要做什么。无论你想做什么,这段代码都不会做,所以我们需要确切地知道你想要做什么,这样我们才能知道需要修复什么。另外,很多时候,仅仅试图解释你在做什么,就会动摇解决方案。

答:

2赞 Chris 4/18/2023 #1

您想读取一个非常大的数字,然后将其组成数字相加。我认为你在这里有一个 XY 问题。没有一种类型可以保存具有数百位数字的 int。这是一个很大的数字:一个 64 位无符号 int 可以存储的最大数字是有 20 位数字。18446744073709551615

相反,使用字符串,然后遍历其数字,将它们转换为非常小的整数,并将它们相加。

例如

#include <iostream>
#include <cctype>
#include <string>

int main() {
    std::string in;
    std::getline(std::cin, in);

    unsigned int sum = 0;

    for (auto c : in) {
        if (!std::isdigit(c)) {
            std::cerr << "Non-digit char encountered." << std::endl;
            return 1;
        }

        sum += c - '0';
    }

    std::cout << "Sum is " << sum << std::endl;

    return 0;
}