提问人:Nikola 提问时间:4/18/2023 最后编辑:tadmanNikola 更新时间:4/18/2023 访问量:77
我的矢量只接受 10 位数字,我怎样才能让它更多?[已结束]
my vector only takes in 10 digits how can i make it more? [closed]
问:
我一直在玩一些代码,尝试一些东西,我想制作一个程序,可以接受任何数量(或至少 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;
}
答:
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;
}
评论
pow(10, i);
变大了。真的很大。远远超过了保持速度的能力。int
pow
uint32_t fool = 1u; for (/*...*/) { /*...*/ fool = fool * 10u; }
pow()
pow()
pow(10, 2)