o così o...
codice:public class Utils { private static Pattern longPattern = Pattern.compile("^[-+]?[0-9]+$"); private static Pattern doublePattern = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$"); private static final String isNumRegex = "-?\\d+(\\.\\d+)?"; public static boolean isPrime(long n){ if(n==1) return false; int[] array = new int[0]; for(int i=1; i<=n; i++){ if( n% i == 0){ array = Arrays.copyOf(array, array.length+1); array[array.length-1] = i; } }return (array[0] == 1 && array[1] == n); } public static String factorize(long d){ long[] array = new long[0]; long[] arrayNoRepeat = new long[0]; long valore = d; String s =""; while(true){ if(valore == 1) break; int i=2; while(i<=valore){ if( valore % i ==0 && isPrime(i)){ array = Arrays.copyOf(array, array.length+1); array[array.length-1] = i; valore = valore/i; break; } i++; } } for(int j=0; j<array.length; j++){ if (Arrays.binarySearch(arrayNoRepeat, array[j])<0){ arrayNoRepeat = Arrays.copyOf(arrayNoRepeat, arrayNoRepeat.length+1); arrayNoRepeat[arrayNoRepeat.length-1] = array[j];} } for(int x=0; x<arrayNoRepeat.length; x++){ int counter = 0; for(int y=0; y<array.length; y++){ if(arrayNoRepeat[x] == array[y]) counter++; } s+= counter > 1 ? arrayNoRepeat[x]+"("+counter+")" : " "+arrayNoRepeat[x]+" "; } return s; } public static void checkNumber(String number){ Pattern longPattern = Pattern.compile("^[-+]?[0-9]+$"); Pattern doublePattern = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$"); if(!isNumeric(number)){ System.out.println("Attenzione numero inputato non valido (che cavolo scrivi!?)"); } else if (longPattern.matcher(number).matches()) { System.out.println(factorize(Long.parseLong(number))); } else if (doublePattern.matcher(number).matches()) { System.out.println("Attenzione il valore Double non è gestito!"); } } public static boolean isNumeric(String str) { return str.matches(isNumRegex); } public static void main(String[] args) { checkNumber("3000") ; checkNumber("10000000000001") ; //<---------- ERRORE10000000000001L } }


Rispondi quotando