# Mit Zahl statt ASCII- Code rechnen



## wi11 (23. Nov 2021)

```
int getQuersumme(long x) {
  String s=""+x;
  int summe=0;
  for (int i=0; i<s.length(); i++) {
    summe=summe+s.charAt(i);
  }
  return(summe);
```

Guten Tag,

ich verstehe nicht wie ich mit der tatsächlichen Zahl statt dem ASCII-Code rechnen kann.
Wenn die Eingabe zum Beispiel 12 ist, kommt bei der Quersumme, also dem Ergebnis, die Zahl 99 raus,
da ja die 1 der 049 und die 2 der 050 im ASCII-Code entspricht. 
Kann mit jemand sagen, wie ich das fixen kann?


Vielen Dank


----------



## fhoffmann (23. Nov 2021)

Du hast zwei Möglichkeiten:

Zum einen - wenn du unbedingt mit Strings arbeiten willst - kannst du beim Bilden der Summe jedesmal 48 abziehen, also `summe=summe+s.charAt(i)-48;`.

Zum anderen könntest du auf die Umwandlung in Strings verzichten und stattdessen `%` und `/` benutzen:

```
123 % 10 = 3
123 / 10 = 12
```


----------



## wi11 (23. Nov 2021)

danke!


fhoffmann hat gesagt.:


> Du hast zwei Möglichkeiten:
> 
> Zum einen - wenn du unbedingt mit Strings arbeiten willst - kannst du beim Bilden der Summe jedesmal 48 abziehen, also `summe=summe+s.charAt(i)-48;`.
> 
> ...


danke!


----------



## kneitzel (23. Nov 2021)

fhoffmann hat gesagt.:


> kannst du beim Bilden der Summe jedesmal 48 abziehen,


Da von mir noch noch ein kleiner Tipp um besser lesbaren Code zu bekommen:
Ich finde die 48 etwas "kryptisch" - das dies der ASCII Code vom Zeichen 0 ist, hat man ja nicht wirklich auf dem Schirm. So ein char ist aber auch nur eine 16 Bit Zahl und beim Rechnen mit Integern wird der automatisch zu einem int gecastet. Daher kann man auch einfach statt der 48 das Literal für das Zeichen 0 schreiben: '0':
`summe=summe+s.charAt(i)-'0';`

Dies finde eine Schreibweise, dich ich für verständlicher halte.


----------

