Array Hilfe

dorenthe

Grünschnabel
Hi
kleines problemchen
bin 1. Jahr Informatik student und hab nen Java problem hoffe das gehört auch hier rein.

Soll ein Applet entwickeln indem 2 reihen mit zahlen ausgelesen werden die maximal 64 ziffern lang sind und es ist glaub ich die capacität eines Long´s. Die Summe von den beiden reihen sollen berechnet werden und wieder gegeben werden habe schon angefangen und seht selbst wie weit ich gekommen bin! Vielleicht könnt ihr mir ein bissl helfen... wollte die beiden zalhlen in einem string setzten und nachher mit einem array zusammenfügen aber...

Das ganze soll mit einem Array gemacht werden...

hier das Script


Java:
import java.awt.*;

import java.awt.event.*;

import java.applet.*;

import java.util.*;



public class hd5 extends Applet {



    public String strGetal1,strGetal2;

    public String[] arrGetal1,arrGetal2;



    public hd5(){



        strGetal1 = "198000009968283692636178819231";

        strGetal2 = "145635789478838982399292929201";

        String[] arrGetal1 = new String[strGetal1.length()];

        String[] arrGetal2 = new String[strGetal2.length()];



        int idx= 0; int tokenCount;

    StringTokenizer st = new StringTokenizer(strGetal1);

    tokenCount = st.countTokens();

    System.out.println("Number of tokens = " + tokenCount);

    while (st.hasMoreTokens()) 

        { arrGetal1[idx] = st.nextToken(); idx++; }

    for (idx=0;idx<tokenCount; idx++)

        { System.out.println(arrGetal1[idx]); }



    }

    

    public void seperate (){

    }

}
 
Hallo!

long ist 8 byte = 64 bit "groß" das hat nichts mit 64 Ziffern zu tun ;-)

Hier mal ein naives Beispiel wie man zwei beliebig große (positive) Ganzzahlen addieren könnte:
Java:
/**
 * 
 */
package de.tutorials;

import java.math.BigInteger;

/**
 * @author Tom
 * 
 */
public class BigNumberAddExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String numberA = "34204328094328049328432098423098423094830943809342834209842309432809480943280942384230834209423743298473289423789423789423749837432987432897423984237894327894374389743289423742379";
        String numberB = "548024380943280934284304382094328092817984798423634798743208437942379847894172981478943274937439874398479847497489749879";

        String sum0 = new BigInteger(numberA).add(new BigInteger(numberB))
                .toString();
        System.out.println(sum0);

        String sum1 = naiveAdd(numberA, numberB);
        System.out.println(sum1);

        System.out.println(sum0.equals(sum1));
    }

    private static String naiveAdd(String numberA, String numberB) {
        int lengthOfNumberA = numberA.length();
        int lengthOfNumberB = numberB.length();

        char[] result = ('0' + (lengthOfNumberA > lengthOfNumberB ? numberA
                : numberB)).toCharArray();

        int indexA = lengthOfNumberA - 1;
        int indexB = lengthOfNumberB - 1;
        int resultIndex = result.length - 1;

        int carry = 0;
        while (indexA >= 0 && indexB >= 0) {
            int valueA = numberA.charAt(indexA) - '0';
            int valueB = numberB.charAt(indexB) - '0';
            int sum = valueA + valueB + carry;
            carry = sum / 10;
            int currentResultFigure = sum % 10;
            result[resultIndex] = (char) ('0' + currentResultFigure);
            indexA--;
            indexB--;
            resultIndex--;
        }

        while (carry > 0 && resultIndex >= 0) {
            int currentResultFigure = result[resultIndex] - '0';
            int sum = currentResultFigure + carry;
            carry = sum / 10;
            result[resultIndex] = (char) ('0' + sum % 10);
            resultIndex--;
        }
        return String.valueOf(result).replaceFirst("^0", "");
    }
}

Gruß Tom
 
Besten dank ihr beiden! Das mit dem Long hädde ich wissen müssen! Ich probiers heut abend aus!

//EDIT

mmh mir fällt grad ein das ich nicht genau weiss ob ich die methoden benutzen darf weil wir gerade bei dem kapitel Array sind! Vielleicht noch ne array lösung?! Wäre Cool ! Aber eigentlich machts ja nichts aus wie ich´s fertiggestellt habe oder?
 
So wie ichs verstanden habe, macht die erste Methodik mit den BigDezimal das gleiche (Ergebnis) wie die selbstgeschriebene unten.

Das ist doch eine Arraylösung....Schritt für Schritt durchgehen und verstehen was es macht. (API zur Hilfe nehmen, bei Standardmethoden)
 
Hi, ich bekomm es immernoch nich hin hab ich vielleicht die falschen Packages oder ?
ich komm nicht drauf, könntet ihr mir vielleicht auch helfen und eine drawString Lösung mir zeigen oder sagen wie ich es ungefähr hinbekomme hab echt alles versucht!

Java:
import java.awt.*;

import java.applet.*;

import java.math.BigInteger;



public class hd5 extends Applet{





    public static void main(String[] args){



    String numberA = "2364789073236478907323647890732364789073236478907323647890734564";

    String numberB = "3873456248387345624838734562483873456248387345624838734562486597";



    String sum0 = new BigInteger(numberA).add(new BigInteger(numberB))

                  .toString();

    System.out.println(sum0);



    String sum1 = naiveAdd(numberA, numberB);

    System.out.println(sum1);



    System.out.println(sum0.equals(sum1));

    }



    private static String naiveAdd(String numberA, String numberB){



        int lengthOfNumberA = numberA.length();

        int lengthOfNumberB = numberB.length();



        char[] result = ('0' + (lengthOfNumberA > lengthOfNumberB ? numberA

                                : numberB)).toCharArray();



        int indexA = lengthOfNumberA - 1;

        int indexB = lengthOfNumberB - 2;

        int resultIndex = result.length - 1;



        int carry = 0;



        while(indexA >= 0 && indexB >=0){

            int valueA = numberA.charAt(indexA) - '0';

            int valueB = numberB.charAt(indexB) - '0';

            int sum = valueA + valueB + carry;

            carry = sum /10;

            int currentResultFigure = sum %10;

            result[resultIndex] = (char) ('0' + currentResultFigure);

            indexA--;

            indexB--;

            resultIndex--;



    }

        while (carry >0 && resultIndex >=0) {

            int currentResultFigure = result[resultIndex] - '0';

            int sum = currentResultFigure + carry;

            carry = sum /10;

            result[resultIndex] = (char) ('0' + sum % 10);

            resultIndex--;

        }

        return String.valueOf(result).replaceFirst("^0", "");



    }

}
 
Zurück