Wie eine sich wiederholende Gleichung zu konstruieren?
Frage
Nehmen wir an zwei ganzen Zahlen x und N.
Ich versuche, zu bestimmen, wie ein Algorithmus zu konstruieren, die eine ganze Zahl der Wert x N-mal wiederholt zurückkehren würde.
Also, wenn x betrug 9 und N betrug 4, zurückkehren würde die Gleichung 9999.
Und wenn x betrug 9 und N betrug 5 würde die Gleichung zurückkehren 99999. (ad nauseam)
Ich hoffe, dass dies nicht völlig absurd ist oder fehl am Platz auf SO. :)
Lösung
Beachten Sie, dass x eine ganze Zahl, und es muss nicht eine 1-stellige Zahl in der Basis-10-System sein. Was passiert, wenn N = 3 und x = 12? Dann sollte die Antwort 121212 sein.
Hier ist die Lösung: Wir brauchen die Länge p
die Zahl x in der Basis-10-System. Lassen Sie p = floor(lg(x)+1)
. Die Zahl, die wir für die Suche ist x + x*10^p + x*10^2p + ... + x*10^(N-1)p
. Das heißt x * (10^(pN) - 1) / (10^p - 1)
.
Andere Tipps
Dies funktioniert für mich: (10 ^ N-1) / 9 * x
Dies scheint eher eine Programmiersprache Frage, wie die Lösung auf der Basis 10 Zahlensystem stark abhängig ist. Der Algorithmus, dies zu tun würde nur eine einfache Schleife über N sein, die multipliziert die vorherige Nummer und ein x erstellt.
int foo(int x, int N) {
int result = 0;
for(i=0; i<N; i++) {
result *= 10;
result += x;
}
return result;
}
Pseudo-Code:
Procedure Construct takes x:integer N:integer
begin
take a variable Result and initialize with 0;
For N times Do
begin
Result <- Result * 10
Result <- Result + x
end
end
ein C ++ Beispiel:
int main()
{
const int x = 9, N = 5;
int Result = 0;
for(int i = 0; i < N; ++i)
{
Result*=10;
Result+=x;
}
//use result here
}
Nur ein wenig anders zu sein, ich habe eine JavaScript Geige mit dieser rekursiven Funktion gemacht:
function repeating(x, n){
return (n) ? (x * Math.pow(10,n-1)) + repeating(x, n-1) : 0;
};
Fiddle: http://jsfiddle.net/SZKeb/2/
Es funktioniert gerade rückwärts von N, so im Wesentlichen als 9000 + 900 + 90 + 9 + 0 = 9999
berechnen wird
In Python, das ist super einfach:
def repeat(x, N):
return int(str(x) * N)
Sounds eher wie Sie versuchen, eine Reihe von sich wiederholenden Zahlen zu konstruieren als die tatsächliche Mathematik zu tun. Warum nicht Sie wie folgt vor (C #)?
using System;
using System.Text;
public int CreateInt(int x, int N)
{
StringBuilder createdString = new StringBuilder();
int createdInt;
for (int i = 0; i < N; i++)
createdString.Append(x.ToString());
if (!int.TryParse(createdString.ToString(), out createdInt))
throw new Exception(string.Format("Value x ({0}) repeated N ({1}) times makes {2}. This is not a valid integer.", x, N, createdString));
return createdInt;
}
int createdInt1 = CreateInt(7, 5); // output: 77777
int createdInt2 = CreateInt(14, 4); // output: 14141414
int createdInt3 = CreateInt(1, 20); // output: throws exception "Value x (1) repeated N (20) times makes 11111111111111111111. This is not a valid integer."
Dieses Beispiel zeigt ein paar Dinge, die Sie für wanna watch out:
- Ist das erzeugte Ergebnis eine gültige ganze Zahl für jede Art Sprache, die Sie Programmierung in?
- Was passiert, wenn die ganze Zahl zu wiederholen (x) ist ein zweistelligen oder höher?
Pseudo-Code zu folgen. Die Essenz dieser wird Sie gehen zu n zählen und Sie jedes Mal zählen werden Sie Ihre x
auszudruckenfor(int i=1; i <=x ; i++)
{
system.print("n");
}