如何构建一个重复的方程?

3
假设有两个整数 x 和 N。
我尝试确定如何构建一个算法,以返回重复 N 次的值为 x 的整数。
举个例子,如果 x 是 9,N 是 4,那么该方程将返回 9999。如果 x 是 9,N 是 5,那么该方程将返回 99999(以此类推)。
希望这不会完全荒谬或不合适在 SO 上提问。 :)

3
我猜程序员不太熟悉方程的概念 ;) - 500 - Internal Server Error
1
“有理整数”是多余的。所有整数都是有理数。 :-) - Joe Stefanelli
2
x 值大于 9 的情况怎么处理? - Svante
9个回答

11

这对我有用:(10^N-1)/9*x


如果N是11,x是12怎么办?这个方程会得到133,333,333,332。 - Thorin
我的答案中已经有解决方案了,一直往下看就可以找到了;) - Michał Trybus
2
@Michał Trybus:不错的补充,根据上下文可能是OP所寻找的。然而,我旨在获得拉科尼亚徽章:少于16个字符的好答案 :-) - Dialecticus
哇,我不知道这样的徽章存在:D - Michał Trybus

4
请注意,x是一个整数,不一定是10进制系统中的1位数。如果N = 3且x = 12,那么答案应该是121212。
以下是解决方案:我们需要在十进制系统中找到数字x的长度p。让p = floor(lg(x)+1)。我们要查找的数字是x + x*10^p + x*10^2p + ... + x*10^(N-1)p。即x * (10^(pN) - 1) / (10^p - 1)。

我还没有仔细检查过这个答案,但它看起来比之前的答案更正确,而且这正是我需要的一种代数表达式。谢谢! - Mr Griever

2

这似乎更像是一个编程问题,因为解决方案严重依赖于十进制数系统。要实现这个算法,只需对N进行简单循环,每次将前一个数字乘以x并加上当前数字。

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

2
实际上,Dialecticus下面的解决方案更好,创建一个长度为N且全为1的整数,将其与x相乘。 - fairidox

1

伪代码:

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

一个C++示例:
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
}

Tsirunyan有点复杂,不太符合需求。 - george9170
1
经过审查所需内容后,我认为您的伪代码是一个更好的示例。 - george9170

1

为了与众不同,我用这个递归函数制作了一个JavaScript小工具:

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

代码演示:http://jsfiddle.net/SZKeb/2/

它是从 N 开始倒推计算的,所以本质上会计算成 9000 + 900 + 90 + 9 + 0 = 9999


1

在Python中,这非常容易:

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

或者使用lambda形式:lambda x, N:int(str(x) * N) - mattbasta

0

伪代码如下。本质上,您将计数到n,每次计数时都会打印出您的x。

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

这并不是“构造”整数,而只是打印一个字符串,这可能不是OP想要的。 - Armen Tsirunyan
这是伪代码,用于表达思想,不意味着可编译。 - george9170
它的错误在于必须循环到N而不是x,打印x,绝对不能是“n”甚至是“x”。 - Armen Tsirunyan

0

听起来更像是你在尝试构建一个重复数字的字符串,而不是进行实际的数学计算。为什么不按照以下方式做(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."

这个示例展示了你需要注意的几件事情:

  1. 在你所编程的语言中,创建的结果是否是有效的整数?
  2. 如果要重复的整数(x)是两位数或更高位数怎么办?

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

7
好的,我会尽力将以下内容翻译成通俗易懂的中文,同时保留原意。希望您能为这段代码添加一些说明。 - U13-Forward
虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - RyanNerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接