开发者

How to construct a repeating equation?

Suppose two integers x and N.

I'm trying to determine how to construct an algorithm th开发者_StackOverflowat would return an integer of the value x repeated N times.

So if x was 9 and N was 4, the equation would return 9999.

And if x was 9 and N was 5, the equation would return 99999. (ad nauseam)

I hope this isn't completely absurd or out of place on SO. :)


This works for me: (10^N-1)/9*x


Note that x is an integer and it does not have to be a 1-digit number in base-10 system. What if N = 3 and x = 12? Then the answer should be 121212.

Here is the solution: we need the length p of the number x in base-10 system. Let p = floor(lg(x)+1). The number we are searching for is x + x*10^p + x*10^2p + ... + x*10^(N-1)p. That is x * (10^(pN) - 1) / (10^p - 1).


This seems like more of a programming question, as the solution is heavily dependent on the base-10 number system. The algorithm to do this would just be a simple loop over N which multiplies the previous number and adds a x.

int foo(int x, int N) {
  int result = 0;
  for(i=0; i<N; i++) {
    result *= 10;
    result += x;
  }
  return result;
}


pseudocode:

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

a C++ example:

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
}


Just to be a little different, I've made a JavaScript fiddle with this recursive function:

function repeating(x, n){
    return (n) ? (x * Math.pow(10,n-1)) + repeating(x, n-1) : 0;
};

Fiddle: http://jsfiddle.net/SZKeb/2/

It just works backwards from N, so essentially will calculate as 9000 + 900 + 90 + 9 + 0 = 9999


In python, this is super easy:

def repeat(x, N):
    return int(str(x) * N)


Sounds more like you're trying to construct a string of repeating numbers than doing actual math. Why not do the following (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."

This sample shows a couple of things you'll wanna watch out for:

  1. Is the created result a valid integer for whatever language you're programming in?
  2. What if the integer to repeat (x) is double digits or higher?


Pseudo code to follow. The essence of this is you are going to count up to n and every time you count you will print out your x

for(int i=1; i <=x ; i++)
{
 system.print("n");
}


x*(10^(floor(log(x)-1)*N))/(10^(floor(log(x)-1)*N))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜