我想编写一个控制台应用程序,从客户端获取整数,并检查该数字是否可以被分层(即可以表示为(
number = d + dd + ddd + ... + dd...ddd
其中CCD_ 1是某个数字。例如
36 = 3 + 33
861 = 7 + 77 + 777
335 - can't be represent in d + dd + ddd way
到目前为止,我只能弄清楚如何允许用户输入一个整数。
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Input integer");
//ask user to input integer
String n = Console.ReadLine();
string nn = Console.ReadLine();
string nnn = Console.ReadLine();
//allows user to input integer
}
}
}
一个简单的解决方案是检查不同的数字以找到解决方案:
// IsStratifified input n
for(int d = 1; d <= 9; d++) {
var s = d;
var c = d;
while(s < n){
c = 10 * c + d; // generates dd, ddd, ...
s += c;
}
if (s == n)
return d;
return -1;
}
假设您的数字有d位。
求a(d(和a(d-1(:a(n(=(10^n-1(*(10/81(-n/9
从这两个数字中选择一个比输入数字小的较大的数字,通常是a(d(。
如果它将你的数字平均划分,那么你的数字就是分层的。
注意,a(n(是1+11+111+…+11…11(以n1s结尾(。
例如36:a(2(=12。36/12=3。
例如861:a(3(=123。861/123=7。
例如335:335/123=appx 2.72。
这是O(1(。
由Henry Bottomley&OEIS