Java - 因子基本转换

时间:2013-02-19 17:19:26

标签: java loops for-loop factorial

我对编程比较陌生,但我正在尝试编写一个程序,将数字从基数10转换为阶乘基数,以帮助我解决更具挑战性的问题。因子基数代表一个数作为阶乘的总和;例如,19(基数10)= 301(基因子),因为3 * 3!+ 0 * 2!+ 1 * 1!= 19。你可以在http://en.wikipedia.org/wiki/Factorial_number_system找到比我更好的解释。对于您可以输入的数字,最简单的方法是什么?到目前为止,我已经能够简单地打印每个小于10的数字的阶乘:

for (int base = 1; base < 10; base++){
    int factorial = 1;
    for (int i = 1; i < base; i++){
        factorial = factorial*i;}
    System.out.println(factorial);}

我确信我犯了很多初学者的错误;但我非常感谢你能给我的任何帮助。感谢您的时间,以及您可以提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

for (int base = 1; base < 10; base++);{

for语句和open括号之间不应该有分号。编译器将其解释为您的意思

for (...) { /* empty block */ }
{ // new, unrelated block
  ...
}

对于实际实施,您可以查看维基百科文章:

  

例如,可以将数字转换为阶乘表示   通过重复划分数字,从右到左生成数字   通过位置值(1,2,3,...),将余数作为数字,   并继续使用整数商,直到该商变为   0

所以像(未经测试,伪装)......

int number = 463;
int radix = 1;
String result = ""; // prob use int[] or list in real life?

while (number > 0) {
   int div = number / radix;
   int remainder = number % radix;
   result = remainder + result;
   number = div;
   ++radix;
}

答案 1 :(得分:1)

试试这个

public int convertToFactorial(int x10){
    int length = String.valueOf(x10).length();
        String[] vals = String.valueOf(x10).split("");

        int result = 0;
        for (int base = 1; base < length + 1; base++){
            int factorial = 1;
            for (int i = vals.length - base; i > 0; i--){
                factorial = factorial*i;
            }
            result += Integer.parseInt(vals[base]) * factorial;
        }
        System.out.println(result);
     return result;
}

P.S。看看java代码约定蚂蚁语言结构,你不应该写;循环后防御。