196040

NP lab 1 Rimski cifri

Oct 15th, 2021 (edited)
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.57 KB | None | 0 0
  1. //package naprednolabs;
  2. import java.util.Scanner;
  3. import java.util.stream.IntStream;
  4. public class RomanConverterTest {
  5.     public static void main(String[] args) {
  6.         Scanner scanner = new Scanner(System.in);
  7.         int n = scanner.nextInt();
  8.         IntStream.range(0, n)
  9.                 .forEach(x -> System.out.println(RomanConverter.toRoman(scanner.nextInt())));
  10.         scanner.close();
  11.     }
  12. }
  13. class RomanConverter {
  14.     /**
  15.      * Roman to decimal converter
  16.      * @param n number in decimal format
  17.      * @return string representation of the number in Roman numeral
  18.      */
  19.     public static String toRoman(int n) {
  20.         String roman = ""; // prazen string da se lepat na nego
  21.         int numc = numDigits(n); // da gi izbroe cifrite za da znajme dali se iljaarki
  22.         if (numc > 3)  // za iljadarki ako ima
  23.             roman = countThousands(n, roman);
  24.         if (numc > 2) // za stotki ako ima
  25.             roman = countHundreds(n, roman);
  26.         if(numc > 1) // za desetki ako ima
  27.             roman = countTens(n, roman);
  28.         if(numc > 0) // za edinici
  29.             roman = countOnes(n, roman);
  30.         return roman;
  31.     }
  32.     private static String countOnes(int numc, String roman) {
  33.         int n = numc % 10;
  34.         if (n < 4)
  35.             for(int i=0; i<n; i++)
  36.                 roman+="I"; // za 1,2,3 deka se I II III soodvetno
  37.         if(n == 4)
  38.             roman+="IV";
  39.         if(n>4 && n<9) // V, VI, VII, VIII
  40.             roman += "V";
  41.         if(n>5 && n<9) // VI, VI, VIII
  42.             for (int i = 0; i < n - 5; i++)
  43.                 roman += "I";
  44.         if(n==9)
  45.             roman += "IX";
  46.         return roman;
  47.     }
  48.     private static String countTens(int n, String roman) {
  49.         int help = (n/10)%10; // koj e brojot na desetkite
  50.         if(help<4)
  51.             for (int i = 0; i < help; i++)
  52.                 roman += "X"; // X, XX, XXX za 10 20 30 soodvetno
  53.         if(help==4)
  54.             roman += "XL";
  55.         if(help>4 && help<9)
  56.             roman += "L";
  57.         if(help>5 && help<9)
  58.             for (int i = 0; i < help - 5; i++)
  59.                 roman += "X";
  60.         if(help==9)
  61.             roman += "XC";
  62.         return roman;
  63.     }
  64.     private static String countHundreds(int n, String roman) {
  65.        int help = (n/100)%10; // kolku stotki ima brojceto
  66.         if(help<4) // za 100 200 i 300 ima 1 C, 2 C i 3 C zatoa so for ciklus moze se istera dodusa i za 4 ima C
  67.             for(int i=0; i<help; i++)
  68.                 roman+="C";
  69.         if(help == 4)
  70.             roman+="CD";
  71.         if (help>4 && help<9) // ako znam so praam jas u zivotot
  72.             roman+="D";
  73.         if (help>5 && help<9)  // za 6 7 8 treba da ima 1 2 i 3 C zalepeno soodvetno
  74.             for(int i=0; i<help-5; i++)
  75.                 roman+="C";
  76.         if (help==9)
  77.             roman+="CM";
  78.         return roman;
  79.     }
  80.     private static String countThousands(int n, String roman) {
  81.         for(int i=0;i<n/1000; i++) // ke zeme kolku iljadarki ima
  82.             roman+="M"; // ke lepe kolku M treba na stringot kako pocetok
  83.         return roman;
  84.     }
  85.     private static int numDigits(int n) {
  86.         int counter=0;
  87.         for(int i=n; i>0; i/=10)
  88.             counter++;
  89.         return counter;
  90.     }
  91. }
  92. /*
  93. Да се напише метод кој ќе прима еден цел број и ќе ја печати неговата репрезентација како Римски број.
  94. Пример Aко ако се повика со парамететар 1998, излезот треба да биде M CM XC VIII.
  95. */
Add Comment
Please, Sign In to add comment