BigInteger Problem

  • Themenstarter Themenstarter GreenThunder
  • Beginndatum Beginndatum
G

GreenThunder

Hallo,

ich brauch mal wieder ein bisschen Hilfe.

Die Aufgabe diesmal lautet, die Quersumme einer BigIntegerzahl zu berechnen.
Mein Problem: Der Rechner rechnet und rechnet, aber nix passiert.

Mein Code:
PHP:
import java.io.*;
import java.lang.*;
import java.math.*;

public class AufgabeZwei
{
   public static BigInteger quersumme(BigInteger a)                               
   {
   BigInteger q = new BigInteger("0");
   BigInteger NULL = new BigInteger("0");
   BigInteger ZEHN = new BigInteger("10");
   
   int x=(a.compareTo(NULL));
   for(;x>0;a=a.divide(ZEHN))
     {
     BigInteger y=a.mod(ZEHN);
     q = q.add(y);
     }
   return q;
   }
    
    
   public static void main(String[] args) throws IOException
   {
   	
   BufferedReader din = new BufferedReader(                  
                  new InputStreamReader(System.in));
   
   System.out.print("Bitte geben Sie den Wert fuer a ein!: "); 
   BigInteger a = new BigInteger(din.readLine());		      
   System.out.print("Die Quersumme von "+a+" ist "+quersumme(a)+".");
  }
}
 
Soweit ich das sehe, wird der Wert von x nie verändert. Deshalb bleibt er immer grösser als 0 und dadurch geht die for - Schleife ins Unendliche.
 
Nein, ich meinte auch, weil x > 0 die Schleifenbedingung ist - aber x in der Schleife nie geändert wird.
 
Snape hat gesagt.:
Nein, ich meinte auch, weil x > 0 die Schleifenbedingung ist - aber x in der Schleife nie geändert wird.

Ok! :)

Das hab ich nun geändert, hab einfach
PHP:
x=(a.compareTo(NULL));
zusätzlich noch in die Schleife kopiert.
 
Hallo!

Also ich wuerde das auf die schnelle so machen:
Code:
 /**
  * 
  */
 package de.tutorials;
 
 import java.math.BigInteger;
 
 /**
  * @author tom
  * 
  */
 public class BigNumberSumOfDigits {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		BigInteger bigNumber = BigInteger.valueOf(Long.MAX_VALUE).pow(
 				4096);
 		System.out.println(calculateSumOfDigits(bigNumber));
 	}
 
 	private static long calculateSumOfDigits(BigInteger bigNumber) {
 		char[] figures = bigNumber.toString().toCharArray();
 		long sumOfDigits = 0L;
 
 		for (int i = 0; i < figures.length; i++) {
 			char c = figures[i];
 			sumOfDigits += c - '0';
 		}
 
 		return sumOfDigits;
 	}
 }
(Korrekt waere zwar der Einsatz eines BigIntegers for sumOfDigits aber der long reicht mir jetzt auch mal...)

Gruss Tom
 

Neue Beiträge

Zurück