private int ordre(Bignumber b) { if (this.Count > b.Count) return 1; else if(this.Count<b.Count) return -1; else { for (int i = this.Count - 1; i >= 0; i--) { if (this.contenu[i] > b.contenu[i]) return 1; else if (this.contenu[i] < b.contenu[i]) return -1; } return 0; } }
public Bignumber soustraction(Bignumber b) { if (this < b) { throw new ArgumentException("On travaille sur des nombres positifs. cette opération est impossible"); } int retenue = 0; Bignumber resultat = new Bignumber("0"); string zeros; int x, y,z; for (int i = 0; i < this.Count; i++) { x = this.contenu[i]; if (i >= b.Count) y = 0; else y = b.contenu[i]; y += retenue; if (y > x) { retenue = 1; x += 10; } else { retenue = 0; } z=x-y; zeros = ""; for (int j = 0; j < i; j++) { zeros += "0"; } resultat += new Bignumber(z.ToString() + zeros); } for (int i = resultat.Count - 1; i > 0; i--) { if (resultat.contenu[i] != 0) break; resultat.contenu.RemoveAt(i); } return resultat; }
public bool égalité(Bignumber autre) { if (this.contenu.Count != autre.contenu.Count) { return false; } for (int i = 0; i < contenu.Count; i++) { if (contenu[i] != autre.contenu[i]) return false; } return true; }
public Bignumber Somme(Bignumber autre) { List<short> resultat = new List<short>(); int maxnb = this.contenu.Count; short retenue,a,b; int calcul; retenue=0; if (autre.contenu.Count > maxnb) { maxnb = autre.contenu.Count; } for (int i = 0; i < maxnb; i++) { if (i >= contenu.Count) a = 0; else a = contenu[i]; if (i >= autre.contenu.Count) b = 0; else b = autre.contenu[i]; calcul = a + b + retenue; if (calcul > 9) { retenue = (short)(Math.Floor((decimal)calcul / 10)); calcul -= 10; } else { retenue = 0; } resultat.Add(((short)calcul)); } if (retenue != 0) { resultat.Add(retenue); } return new Bignumber(resultat); }
public Bignumber[] quotient(Bignumber b) { if (this < b) { return new Bignumber[2] {new Bignumber("0"),this.Copy()}; } string resultat = ""; Bignumber nb = new Bignumber(""); ; for (int i = this.Count - 1; i >= 0; i--) { if (nb.Count==0) { nb = new Bignumber(this.contenu[i].ToString()); } else { string add = nb.ToString(); if (add == "0") { add = ""; } nb = new Bignumber(add + this.contenu[i].ToString()); } if (nb == new Bignumber("0")) { resultat += "0"; nb = new Bignumber(""); } else { if (nb >= b) { int quotient = 0; Bignumber autre = b.Copy(); while (autre <= nb) { quotient++; autre += b; } nb = nb - (autre - b); resultat += quotient.ToString(); } else if (resultat!="") { resultat += "0"; } } } return new Bignumber[2] { new Bignumber(resultat), nb }; }
public Bignumber puissance(Bignumber b) { Bignumber resultat; if (b.Count==1 && b.GetContenu()[0]==0) return new Bignumber("1"); else if (b.Count == 1 && b.GetContenu()[0] == 1) return this; else { Bignumber temp = this.puissance(b / 2); if (b.Is_pair()) { resultat = temp * temp; } else { resultat = temp * temp * this; } } return resultat.Copy(); }
public Bignumber multiplication(Bignumber autre) { if (autre == 0 || this == 0) { return new Bignumber("0"); } Bignumber resultat = new Bignumber("0"); Bignumber temp = new Bignumber("0"); int i = 0; foreach (short mult in autre.contenu) { temp = new Bignumber("0"); for(int u=0;u<mult;u++) { temp += this; } string zeros=""; for (int j = 0; j < i; j++) { zeros += "0"; } resultat += new Bignumber(temp.ToString() + zeros); i++; } return resultat; }
public static bool TryParse(string nb, out Bignumber resultat) { try { resultat = new Bignumber(nb); return true; } catch { resultat = new Bignumber("0"); return false; } }