Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Class;
- import java.util.Scanner;
- public class SumofFactorials {
- public static void main(String[] args) {
- Scanner scan=new Scanner(System.in);
- int a;
- int maxfact=10;
- while(scan.hasNext()) {
- a=scan.nextInt();
- if(a==-1) {
- System.exit(0);
- }
- sumoffactorials(a,maxfact);
- }
- scan.close();
- }
- public static int[] factorial(int maxfact) {
- int a[] = new int[maxfact];
- a[0]=1;
- a[1]=1;
- for (int i=2;i<maxfact;i++) {
- a[i]=i * a[i-1];
- }
- return a;
- }
- public static boolean Checking(int arr[],int input,int f) {
- if (input==0) {
- return true;
- } else
- return Checking(arr, input-arr[f], f-1);
- }
- public static int greatestIndexNotExceeding(int[] data, int limit) {
- if (data.length < 1) {
- return -1;
- }
- return greatestIndexNotExceeding(data, limit, 0, data.length - 1);
- }
- private static int greatestIndexNotExceeding(int[] data, int limit, int lb, int ub) {
- final int mid = (lb + ub) / 2;
- if (mid == lb && data[mid] > limit) {
- return -1;
- }
- if (data[mid] <= limit && (mid == ub || data[mid + 1] > limit)) {
- return mid;
- }
- if (data[mid] <= limit) {
- return greatestIndexNotExceeding(data, limit, mid + 1, ub);
- } else {
- return greatestIndexNotExceeding(data, limit, lb, mid);
- }
- }
- public static void sumoffactorials(int input,int maxfact) {
- int arr[];
- arr=factorial(maxfact);
- int f=greatestIndexNotExceeding(arr,input);
- Checking(arr,input,f);
- if (Checking(arr,input,f) == true)
- System.out.println("YES");
- else
- System.out.println("NO");
- if(input==-1) {
- System.exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement