я написал ниже программу, чтобы извлечь последние пять цифр п числа, которое является ответом функции ниже:Сохраняя часть большого числа
п = 1^1 + 2^2 + ... + m^m
где m задано пользователем. Программа работает нормально для небольшого числа, но она не будет работать на m, равной 100^100.
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
cin>>n;
intmax_t a[n],num,rem;
a[0]=0;
for (int i=1; i<=n; i++){
a[i] = a[i-1]+pow(i,i);
}
num=a[n];
int b[5];
for (int i = 1; i <=5; i++) {
rem = fmod(num,10);
b[i]=rem;
num = num/10;
}
for (int i = 1; i <=5; i++) {
cout<< b[i];
}
return 0;
}
Возможный дубликат [Расчет мощн (а, б) по модулю п] (http://stackoverflow.com/questions/8496182/calculating-powa -b-mod-n) – ruakh
Две проблемы: во-первых, C++ не имеет [массивы переменной длины] (https://en.wikipedia.org/wiki/Variable-length_array) (некоторые компиляторы имеют это расширение , но, пожалуйста, избегайте этого в пользу, например, 'std :: vector'). Во-вторых, когда вы делаете 'num = a [n];' вы индексируете 'a' вне пределов. Ваши циклы также индексируют массивы (как 'a', так и' b') за пределами границ. Помните: индексы массива основаны на * ноль *. –
Кроме того, 'fmod' предназначен для типов с плавающей запятой – George