我的矢量只需要 10 位数字我怎样才能让它更多?

问题描述 投票:0回答:1

我一直在玩一些代码,尝试一些东西,我想制作一个程序,可以接收任意数量(或至少 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++ vector integer iostream cmath
1个回答
1
投票

你想读入一个非常大的数字,然后把它的组成数字相加。我认为你在这里有一个XY问题。没有任何类型可以容纳具有数百位数字的 int。这是一个 big 数:64 位 unsigned int 可以存储的最大数字是

18446744073709551615
,它有 20 位数字。

而是使用一个字符串,然后迭代它的数字,将它们转换为非常小的整数,然后对它们求和。

例如

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.