Výsledky 1 až 7 z 7

Téma: [JAVA] Odčítání nekonečného čísel

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1

    Standardní Re: [JAVA] Odčítání nekonečného čísel

    Jelikoz je ten string v jave pole znaku tak bych to projizdel v cyklu od pole.length() do 0 a odecital prislusne rady s prenosem do vyssich radu.
    NTB MSI EX600, CPU Intel Core 2 Duo T5550@1,83Ghz, 2GB RAM, GF8400M-G 256MB, HDD 320GB...

  2. #2
    Administrátor mince Avatar uživatele Jezevec
    Založen
    08.10.2002
    Bydliště
    Teplice
    Příspěvky
    6 738
    Vliv
    300

    Standardní Re: [JAVA] Odčítání nekonečného čísel

    Citace Původně odeslal Chuck Zobrazit příspěvek
    Jelikoz je ten string v jave pole znaku tak bych to projizdel v cyklu od pole.length() do 0 a odecital prislusne rady s prenosem do vyssich radu.
    Videl bych to podobne, nebude to mozna nejrychlejsi ani nejelegantnejsi resenni, ale ucel to asi splni.

    Princip:

    for ( int i = 0, len(b), i++) {

    int x = a[len(a - i)]
    int y = b[len(b - i)] + prenos

    int u = x - y
    int prenos = 0

    if ( u < 0) {
    prenos = 1
    u = u + 10
    }

    vysledek[i] = u

    }

    Netvrdim ze je to dobre psal sem to z hlavy a syntax neresim vubec. nekonecne velky to samozrejme byt nemuze v zadnym pripade, ale nejvetsi celociselnej typ je IMO dost velkej aby prelez kapacitu jakyhokoli dostupnyho media .

    Edit: Samo je tam treba jeste osetrit ktery z cisel je delsi a vysledek by to ukladalo pozpatku, ale to je detail.

    BTW: To ze si stim "nikdo nevi rady" taky svedci o leccems, ucili ste se vubec scitat/odcitat vetsi cisla na papire ?

    Edit2: Pokud zadani zni skutecne tak, jak je uvedeno "Program, který umí odčítat nekonečná čísla, tedy čísla uložené ve String", bylo by naprosto korektnim resenim napsat odpoved, ze zadani nema reseni. Pokud by nebyla uznana, je to na vyhazov vyucujiciho pro neschopnost.
    Naposledy upravil Jezevec; 04.05.2009 v 17:11.
    IMPROBE AMOR, QUID NON MORTALIA PECTORA COGIS - krutá jsi, lásko, kam až ty doženeš smrtelná srdce -- Vergilius
    Mnoho je prostředků, které léčí lásku, ale žádný není spolehlivý.
    S tím, čeho se na nás dopustili druzí se už nějak vyrovnáme. Horší je to s tím, čeho jsme se na sobě dopustili sami.
    -- Francois La Rochefoucauld
    Nabídnout přátelství tomu, kdo chce lásku, je jako dát chleba tomu, kdo umírá žízní.

  3. #3

    Standardní Re: [JAVA] Odčítání nekonečného čísel

    Teraz sa ucim javu z jednej knihi, tak som to zobral ako ulohu a pokusil sa tonaprogramovat s obmedzenim, ze mozes zadavat iba kladne cele cisla. Program akceptuje 2 argumenty skladajucich sa iba z decimalnych cislic.
    Tu je vysledny kod (bez komentarov aby bolo nad cim rozmyslat:
    Kód:
    class subLongDec {
    	public static void main(String[] arguments){
    		boolean sign = false;
    		if(arguments.length != 2) {
                System.out.println("Wrong number of arguments");
                System.exit(1);
            }
    
            String cleannum1 = new String("");
            String cleannum2 = new String("");
            String temp = new String("");
    
            for(int j=0; j < arguments.length; j++){
                for(int i = 0; i < arguments[j].length(); i++){
                    if(arguments[j].charAt(i) < 48 || arguments[j].charAt(i) > 57) {
                        System.out.println("Incorrect number format, enter correct decimal integer.");
                        System.exit(1);
                    }
                }
            }
    
            temp = arguments[0];
            cleannum1 = temp;
            for(int i=0; i < temp.length(); i++){
                if(temp.charAt(i) == 48) cleannum1 = temp.substring(i+1);
                else break;
            }
    
            temp = arguments[1];
            cleannum2 = temp;
            for(int i=0; i < temp.length(); i++){
                if(temp.charAt(i) == 48) cleannum2 = temp.substring(i+1);
                else break;
            }
    
            System.out.println("n1: " + cleannum1 + " n2: " + cleannum2);
            
            int dif;
            if(cleannum1.length() > cleannum2.length()){
                dif = cleannum1.length() - cleannum2.length();
                for(int i = 0; i < dif; i++){
                    cleannum2 = "0" + cleannum2;
                }
            }
            else if(cleannum2.length() > cleannum1.length()){
                dif = cleannum2.length() - cleannum1.length();
                for(int i = 0; i < dif; i++){
                    cleannum1 = "0" + cleannum1;
                }
            }
    
            for(int i = 0; i < cleannum1.length(); i++){
                if(cleannum1.charAt(i) < cleannum2.charAt(i)){
                    sign = true;
                    break;
                }
                if(cleannum1.charAt(i) > cleannum2.charAt(i)) break;
            }
            if(sign == true){
                temp = cleannum1;
                cleannum1 = cleannum2;
                cleannum2 = temp;
            }
    
            int carr = 0;
            int c = 0;
            String sol = new String("");
            for(int i = cleannum1.length() - 1; i >= 0 ; i--){
                c = Integer.parseInt(cleannum1.substring(i,i+1)) - Integer.parseInt(cleannum2.substring(i,i+1)) - carr;
                if(c >= 0) {
                    sol = String.valueOf(c) + sol;
                    carr = 0;
                }
                else{
                    sol = String.valueOf(10 + c) + sol;
                    carr = 1;
                }
            }
    
            temp = sol;
            for(int i=0; i < temp.length() - 1; i++){
                if(temp.charAt(i) == 48) sol=temp.substring(i+1);
                else break;
            }
    
            if(sign == false) System.out.println("Sollution: " + sol);
            else System.out.println("Sollution: -" + sol);
            System.exit(0);		
    	}
    }
    Core 2 Quad Q8200 @ 3325MHz (1,28V) | Asus Maximus II Formula | Palit 9800GTX+ | 8GB A-Data 800+ EE | Noctua U12F | BenQ FP241W | Logitech MX518 | Logitech G11 | Logitech diNovo Edge

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •