Я довольно новичок в C++ и пытаюсь написать программу для обработки очень больших входных чисел (7e + 11 ish). Он отлично работает с небольшими количествами, но не с этими большими. Я понимаю, это потому, что очень большие числа не будут вписываться в int, но когда я пытаюсь использовать другие типы, такие как __int64, long long int, unsigned long long int и uint64_t, функция «nextsmallestfactor» не работает (обычно она выдает 0 и поэтому срабатывает ошибка при делении на a, на выходе). Что мне тогда использовать? Этот код должен принимать большое число, многократно делить его на наименьшее число, которое делится на него каждый раз, и вывести a, самый высокий основной коэффициент, в конце.Функции с очень большими числами в C++
#include <iostream>
using namespace std;
int numberToFactorise = 700000000000;
int nextsmallestfactor(int numbertofactorise){
for (int factor = 2; factor < numbertofactorise; factor++){
if (numbertofactorise%factor == 0){
return factor;
}
}
}
int main(){
int quotient = numberToFactorise;
int a=1;
while (quotient > 1){
a = nextsmallestfactor(quotient);
quotient = quotient/a;
};
cout << a;
cout << endl;
system("PAUSE");
return 0;
}
Большое спасибо за любую помощь.
Максимальный размер int равен 2,147,483,647 – andre
Не все пути кода в nextsmallestfactor() возвращают значение ... Но если вы измените свое условие на 'factor <= numbertofactorise', тогда вы должны быть хорошими, так как x% x == 0 для все значения, оператор if должен быть правдой для одной итерации – clcto
You h чтобы использовать более большой тип 'int', например' int64_t'. Что касается «моя функция не работает» ... ну, вам нужно выяснить, что не работает. Какими бы проблемами ни была ваша функция, они не имеют никакого отношения к тому, что вы использовали 'int64_t'. – AnT