问题描述
有一个名为U-125的Universe,其中不使用十进制编号系统。他们对数字的计数如下:
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1","value2" };
}
我需要编写一个带有函数1,2,5,11,12,15,21,22,25,51,52,55 ...
的程序,该程序返回一个数字,当给定十进制数字时,其基数已转换为U-125的编号系统。
我发现每个小数将对应于本系列中的convertBase(n)
,但我不知道如何生成该系列以及该系列应该持续多长时间。
解决方法
嗯,这是关于数字转换的。我们观察到,我们有一个带有3个不同数字的编号系统。 1、2和5。
因此,我们需要执行2个步骤。
- 首先:将小数转换为以3为底的数字。
- 第二个:将0替换为1,将1替换为2,将2替换为5。
对于转换,我们使用标准方法,对模进行取模以获取数字,然后使用整数除法获取下一个值。可以在SO上找到一百万次,而无需进一步解释。
由于此算法以相反的顺序计算数字,因此我们将这些数字放到堆栈上,然后以正确的顺序输出它们。
下面是C ++中的一些示例代码,该代码可将值转换为十进制数100。
请参阅:
#include <iostream>
#include <string>
#include <stack>
int main() {
for (unsigned int k{0}; k < 101; ++k) {
std::cout << k << " \t--> ";
unsigned int n{ k };
std::stack<unsigned int> digits{};
do {
switch (n % 3) {
case 0:
digits.push(1);
break;
case 1:
digits.push(2);
break;
case 2:
digits.push(5);
break;
default:
digits.push(0);
break;
}
n = n / 3;
} while (n > 0);
while (!digits.empty()) {
std::cout << digits.top();
digits.pop();
}
std::cout << '\n';
}
return 0;
}
,
我很好奇,所以现在破坏了您的作业(我!我!我是一项作业编写服务!)。这就是here所示的递归算法,用于转换为以n为底的数字,并扩展为任意数字。我用一些有争议的数字补足了基数17,您必须适应这一方面。也许尝试实现堆栈版本,因此至少要进行一些练习。显然,它是用Python实现的。嗯...不,C ++,抱歉。
public class BaseConversion {
public static String writebase(int n,int base,char separator,String[] numerals) {
if (base > numerals.length || base <= 0)
throw new IllegalArgumentException();
if (n != 0) {
return writebase(n / base,base,separator,numerals) + separator + numerals[n % base];
} else {
return numerals[0];
}
}
public static void main(String[] args) {
String[] numerals = {"٠","אחת","٢","שלש","٤","חמש","٦","٧","שמונה","٩","α","β","γ","δ","ε","ζ","η"};
int n = 17271;
int base = 17;
System.out.println(writebase(n,' ',numerals));
}
}