Составить программу для вычисления точного значения n^n
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
int main()
{
char iar[50],otvet[2000];
char c[2000];
int a,e,d,n,o,i,j,l;
clrscr();
otvet[0] = iar[0] = 0;
e = d = 1;
cout<<"Возведение в степень: a^a\n";
printf("Введите a: "); scanf("%d", &a);
//Переводим а в массив
i = 0; n = a;
while(n>0)
{
o = n%10;
for(j=i; j>0; j--)
iar[j] = iar[j-1];
iar[0] = o; n = n/10;
i++; e = d = i;
}
for(j=0; j<i; j++)
otvet[j] = iar[j];
for(n=1; n<a; n++) //Возведение в степень
{
for(i=0; i<e+d; i++) c[i]=0; //Обнуляем результат
//Умножение
for(i=0; i<d; i++)
{
o=0; l=0;
for(j=e-1; j>=0; j--)
{
c[j+d-i]+=(otvet[j]*iar[d-1-i] + o)%10;
if(c[j+d-i]>9)
{
l=c[j+d-i]/10;
c[j+d-i]=c[j+d-i]%10;
}
o =(otvet[j]*iar[d-i-1] + o)/10+l;
if(j==0) c[j+d-1-i] += o;
l=0;
}
}
//Избавляемся от ведущих нулей
e=e+d;
while(c[0]==0)
{
for(j=0; j<e-1; j++)
c[j]=c[j+1];
if(e!=1) e--;
else break;
}
//Выводим ответ в otvet[]
for(i=0; i<e; i++)
otvet[i] = c[i];
}
if(a==0) cout<<"Ответ: 0";
else
{
cout<<"Ответ: ";
for(i=0; i<e; i++) printf("%d",otvet[i]);
}
getch();
}
Результат
Возведение в степень: a^a
Введите a: 11
Ответ: 285311670611
Комментарии:
Нету комментариев для вывода...