Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Schriftlich addieren (Zeichenketten)

Schreiben Sie eine Funktion, die zwei ganzzahlige Arrays (integer) entgegennimmt und diese schriftlich addiert. Dabei dürfen die beiden Arrays an jeder Stelle nur die Werte von 0 bis 9 enthalten.
Das Resultat ist wieder ein Array mit Werten im Bereich 0 bis 9. Das neue Array ist möglicherweise um einen Eintrag größer als das größere der beiden Eingabefelder (Übertrag). Dokumentieren Sie, ob die "Einer" durch den höchsten bzw. den niedrigsten Index dargestellt werden.

Zusatzaufgabe: Die Eingabe wie auch die Ausgabe soll ein Array mit Basistyp char (z. B. ASCII) sein. Dabei ist zu beachten, dass die Null nicht durch das Byte 0, sondern durch das ASCII-Zeichen Null ('0') dargestellt wird.

Trick: wert[i] := arr[i] - '0'

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

4 Lösung(en)

def addition(a,b):
   a.reverse()
   b.reverse()
   if len(b) < len(a):
      n = len(b)
      m = len(a)
   else:
      n = len(a)
      m = len(b)

   c=0
   li=[]
   for i in range(n):
      print a[i],b[i],c
      li.append((a[i]+b[i]+c)%10)
      if a[i]+b[i]>9:
         c = 1
      else:
         c = 0

   for i in range(m-n):
      if len(b) < len(a):
         li.append((a[n+i]+c)%10)
         if a[n+i]+c>9:
            c = 1
         else:   
            c = 0
      else:
         li.append((b[n+i]+c)%10)
         if b[n+i]+c>9:
            c = 1
         else:   
            c = 0

   if c == 1:
      li.append(1)
   
   s=''
   li.reverse()
   for ziffer in li:
      s=s+str(ziffer)
   print s

addition([3,4,5,6,7,8],[9,9,9,9,9,9])
#1345677
addition([3,4,5,6,7,8],[9,9,9,9,9,9,9,9,9,9])
#10000345677
addition([1,1,1,1,3,4,5,6,7,8],[9,9,9,9,9,9])
#1112345677

                
package ch.programmieraufgaben.strings;

import java.util.Scanner;

/**
 * Aufgabe 7.5 
 * @author Philipp Gressly (phi AT gressly DOT ch)
 */
public class SchriftlichAddieren {
  public static void main(String[] args) {
    new SchriftlichAddieren().top();
  }
  
  void top() {
     String zahl1 = einlesen("erste Zahl" );
     String zahl2 = einlesen("zweite Zahl");
     String summe = addieren(zahl1, zahl2);
     if(summe.length() > 1 && summe.charAt(0) == '0') {
         summe = summe.substring(1);
     }
     System.out.println("Summe = " + summe);
  }
  
  Scanner sc = new Scanner(System.in);
  String einlesen(String was) {
    System.out.println("Bitte " + was + " eingeben: ");
    return sc.nextLine().trim();
  }
  
  String addieren(String a, String b) {
     String result = "";
     int anzZiffern = Math.max(a.length(), b.length());
     int uebertrag = 0;
     int pos = 1; // einer
     while(pos <= anzZiffern + 1) {
       int zifferA = ziffer(a, pos);
       int zifferB = ziffer(b, pos);
       int sum     = zifferA + zifferB + uebertrag;
       if(sum > 9) {
           uebertrag = sum / 10;
           sum = sum % 10;
       } else {
           uebertrag = 0;
       }
       result = ziffer(sum) + result;
       pos = pos + 1;
     }
     return result;
  }
  
  
  /**
   * Ziffer aus der Zahl extrahieren
   * @param zahlenString z. B. "7734"
   * @param pos 1=einer, 2= zehner, 3= 100er ...
   * @return ziffer als int oder 0, falls nicht genügend Ziffern
   */
  int ziffer(String zahlenString, int stelle) {
    // 1 -> length() - 1
    // 2 -> length() - 2
    int pos = zahlenString.length() - stelle;
    if(pos < 0) {
        return 0;
    }
    return zahlenString.charAt(pos) - '0';
  }
  
  
  String ziffer(int zahl) {
     if(zahl < 1) return "0";
     if(zahl > 9) return "X"; // fehler
     return "" + zahl;
  }
  
}  // end of class SchriftlichAddieren
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

// $a und $b können sowohl vom typ
// Number als auch String sein

function addInWriting(a, b) {
  // vorbereitung
  function toNumArr(x) {
    x = x.toString().split('');
    for (i in x) x[i] = parseInt(x[i]);
    return x;
  }
  function addLeadZero(arr, l) { while (arr.length < l) arr.unshift(0); }

  a = toNumArr(a); b = toNumArr(b);
  let len = Math.max(a.length, b.length);
  addLeadZero(a, len), addLeadZero(b, len);

  // das ergebnis könnte auch direkt in $b geschrieben werden,
  // daher dient $result eher demonstrationszwecken oder
  // der späteren grafischen aufbereitung (nicht hier)
  let result = [],
      carry = 0;

  // kern des ganzen
  for (let i = len-1; i >= 0; i--) {
    let x = a[i] + b[i] + carry;
    carry = Math.floor(x/10);
    result.unshift((x >= 10) ? x-10 : x);
  }
  result.unshift(carry);

  return parseInt(result.join(''));
}

//ausgabe
console.log(addInWriting(2, '2'));
console.log(addInWriting(7, 5));
console.log(addInWriting(1, 99999));                         // lissalanda@gmx.at

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// C++ 14 | VS-2022

#include <iostream>

inline const std::string add(std::string first_, std::string second_) {
    const auto dif{ abs((int)first_.length() - (int)second_.length()) };

    if (first_.length() > second_.length())
        second_ = std::string(dif, '0') + second_;
    else
        first_ = std::string(dif, '0') + first_;

    std::string res{ std::string(first_.length() + 1, '0') };

    auto rem{ 0 };

    for (size_t i{ first_.length() }; i > 0; --i) {
        const auto tmp{ (first_[i - 1] - '0') + (second_[i - 1] - '0') + rem};
        res[i] = (tmp % 10) + '0';
        rem = tmp / 10 % 10;
    }
    res[0] = rem + '0';
    return res;
}

int main() {
    std::cout << add("123456789", "987654321") << "\n";
    std::cout << add("9", "999") << "\n";
    std::cout << add("1", "9") << "\n";
}

                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 2
Schwierigkeit: k.A.
Webcode: oh4f-nrsz
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen