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. :)

War es hilfreich?

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:

  1. Ist das erzeugte Ergebnis eine gültige ganze Zahl für jede Art Sprache, die Sie Programmierung in?
  2. 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

auszudrucken
for(int i=1; i <=x ; i++)
{
 system.print("n");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top