0

我对编程比较陌生,但我正在尝试编写一个程序,将数字从 10 转换为阶乘,以帮助我解决更具挑战性的问题。阶乘基数将一个数表示为阶乘之和;例如,19 (base 10) = 301 (base factorial),因为 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);}

我确信我犯了许多初学者错误;但我非常感谢您为此提供的任何帮助。感谢您抽出宝贵时间,感谢您提供的任何帮助。

4

2 回答 2

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

在 for 语句和左大括号之间不应该有分号。编译器正在解释它,就好像你的意思

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

对于实际实现,您可以查看 Wikipedia 文章:

例如,可以将一个数字转换为从右到左生成数字的阶乘表示,方法是重复将该数字除以位值(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;
}
于 2013-02-19T17:22:55.170 回答
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;
}

ps看java代码约定ant语言结构,不应该写;循环防御后。

于 2013-02-19T17:25:28.963 回答