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.
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...
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 dobrepsal 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í.
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 komentarovaby 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
Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)