FactorialSystem

/*Problem Statement


In the factorial number system the value of the first digit (from the right) is 1!, the value of the second digit is 2!, ..., and the value of the n-th digit is n!.

This means that any decimal number d can be written in this system as: anan-1...a2a1, where

d = an * n! + an-1 * (n-1)! + ... + a2 * 2! + a1 * 1! and 0 <= ai <= i for all i.

Given an int num in decimal, return its representation in the factorial number system.
Definition

Class: FactorialSystem
Method: convert
Parameters: int
Returns: int
Method signature: int convert(int num)
(be sure your method is public)

Notes
- n! = 1 * 2 * ... * n
Constraints
- num will be between 1 and 3628799 (10!-1), inclusive.
Examples
0) 1 Returns: 1
1) 24 Returns: 1000 24 = 4!
2) 153 Returns: 11111 153 = 1! + 2! + 3! + 4! + 5!.
3) 133 Returns: 10201
4) 3628799 Returns: 987654321


This problem statement is the exclusive and proprietary property of TopCoder, Inc.
Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited.
(c)2003, TopCoder, Inc. All rights reserved. */

package factorialsystem;

import java.util.ArrayList;

public class FactorialSystem {

private static int[] fn = init();

private static int[] result = new int[]{0,0,0,0,0,0,0,0,0,0};



public static void convert(int num) {
int reminder = num;

int i = 10;
while(reminder != 0 && i > 0) {
result[i - 1] = reminder / fn[i - 1];
reminder = reminder % fn[i - 1];
i--;
}
show();
}

private static int[] init() {
int[] temp = new int[]{1,1,1,1,1,1,1,1,1,1};
for(int i = 0; i < temp.length; i++) {
for(int j = 1; j <= i+1; j++) {
temp[i] = temp[i] * j;
}
}

return temp;
}

private static void show() {
System.out.print("The result is:");
boolean flag = false;
for(int i = result.length - 1; i >= 0; i--) {
if (flag) System.out.print(result[i]);
else if(result[i] != 0 && flag == false) {
System.out.print(result[i]);
flag = true;
}
}
}
}

你可能感兴趣的:(J#)