Potenzen in c# ausrechnen nur durch addieren?
Hallo,
ich habe immoment das einfache Projekt in c# einen Taschenrechner in der Konsole zu programmieren. Ich würde gerne Potenzen ausrechnen aber ohne multiplizieren und Math.pow. Ist das möglich?
Danke schonmal im vorraus:D
4 Antworten
...hatte bei meiner ersten Antwort wohl einen kleinen Lapsus...
nach etwas Gassirunde mit dem Hund hatten die grauen Zellen wieder etwas Sauerstoff. Es geht auch ohne Rekursion:
using System;
class Prog{
static ulong BadPow(ulong basis,uint exponent){
ulong aktuelleBasis=basis;
ulong produkt=basis;
for (int i=1;i<exponent;++i){
Console.WriteLine("neue Basis :" +produkt); //mal gucken wo wir stehen
for (ulong j=1;j<basis;++j){
Console.WriteLine("aktuelles Produkt:" +produkt); //mal gucken wo wir stehen
produkt+=aktuelleBasis;
}
aktuelleBasis=produkt;
Console.WriteLine("aktuelles Produkt:" +produkt);//mal gucken wo wir stehen
}
return produkt;
}
public static void Main(string[] args){
ulong basis=7;
uint exponent=13;
ulong result=BadPow(basis, exponent);
Console.WriteLine("Das Endergebnis ist: " + result);
Console.WriteLine("Probe mit Math.Pow: " + Math.Pow(basis,exponent));
Console.WriteLine("beliebige Taste...");
Console.ReadKey();
}
}
Du kannst die Multiplikation durch eine Summe ersetzen und somit auch ganzzahlige Potenzen durch eine Summe ersetzen. Sinnhaft ist das eben nicht mehr und die Performance ist mies.
würde gerne Potenzen ausrechnen aber ohne multiplizieren und Math.pow.
echt mal? ...geht nicht gibts nicht...
Das Folgende ist natürlich nicht repräsentativ und kommt gleich nach Abakusrechnen😱 oder Erbsen zählen.
Hirnjogging für Opas (ich hoffe Du kannst den 💩 nachvollziehen)
using System;
class Prog{
//ganz faule Sache: addiere eponent mal recursiv Basis
static long BadPow(long aktuelleBasis,long basis,int exponent){
long produkt=aktuelleBasis;
if (exponent==1) {
return produkt;
}
else {
//basis mal die aktuelle Basis addieren ergibt ein Produkt...
for (int j=1;j<basis;++j){
produkt+=aktuelleBasis;
Console.WriteLine("aktuelles Produkt:" +produkt); //mal gucken wo wir stehen
}
Console.WriteLine("neue Basis an Recursion:" +produkt); //mal gucken wo wir stehen
return BadPow(produkt,basis,--exponent);
}
}
public static void Main(string[] args){
long result;
long basis=7;
int exponent=13;
// ich war zu faul die metode für 2 Argument zu überschreiben deshhalb zweima das gleiche Argument Basis
result=BadPow(basis,basis,exponent);
Console.WriteLine("Das Endergebnis ist: " + result);
Console.WriteLine("Probe mit Math.Pow: " + Math.Pow(basis,exponent));
Console.WriteLine("beliebige Taste...");
Console.ReadKey();
}
}
Klar.
2³ = 2*2*2 = (2+2)*2 = (2+2) + (2+2)
der Ansatz passt aber dürfte bei kleinen Potenzen gerad noch überschaubar sein. Bei 7 hoch 13 wird das schon lustiger aussehen.
...und natürlich sollte die Funktion auch noch mit flexiblen eingaben zurechtkommen können.
..