Oleksy_Adam no w sumie masz racje że trudno to przekroczyć...może zapytam dlaczego to nie działa dla 2^100 a=2;n=100
#include <stdio.h>
int ilmnoz;
long double pot (int a,int n){
if (n==1) return a;
else {
if (n%2!=0) {
ilmnoz=ilmnoz+2;
return pot(a*a,n/2)*a;
}
else {
ilmnoz++;
return pot(a*a,n/2);
}
}
}
int main(){
int a,n;
printf("\nPodaj a:");
scanf("%d",&a);
printf("\nPodaj n:");
scanf("%d",&n);
if ((a<=0)||n<=0) printf("\nDaj inne liczby!\n");
else {
printf("\nWynik:%.Lf\n",pot(a,n));
printf("\nMnozen: %d\n",ilmnoz);
}
return 0;
}
Już działa:
#include <stdio.h>
int il;
long double pot (long double a,int n){
if (n==1) return a;
else {
if (n%2!=0) {
il=il+2;
return pot(a*a,n/2)*a;
}
else {
il++;
return pot(a*a,n/2);
}
}
}
int main(){
int n;
long double a;
printf("\nPodaj a:");
scanf("%Lf",&a);
printf("\nPodaj n:");
scanf("%d",&n);
if ((a<=0)||n<=0) printf("\nDaj inne liczby!\n");
else {
printf("\nWynik:%.Lf\n",pot(a,n));
printf("\nMnozen: %d\n",il);
}
return 0;
}