8 svar
376 visningar
Maremare behöver inte mer hjälp
Maremare 1044 – Fd. Medlem
Postad: 3 dec 2019 15:19

addera två tal som string med carry

Två naturliga heltal är givna som teckensträngar av godtycklig längd.
Man ska utföra olika aritmetiska operationer i samband med dessa heltal. I en operation utgår man ifrån de siffror som finns i givna teckensträngar, och bestämmer siffrorna i resultatet, en siffra i taget. På så sätt skapas en ny teckensträng, som representerar resultatet av operationen.

får till koden om talen inte överstrider 9 och tales längd är lika långa, men så fort det blir en carry så visare den fel svar. har skrivit följande.

någon som kan tipsa?

public static String addera (String tal1, String tal2)
{
                 StringBuilder resultat = new StringBuilder();
                 int lengd = tal1.length();
                 int i = 0;
                 int carry = 0;

           while (i < lengd)
           {
                int sum;
              if (i < lengd)
             {  
                      sum = (tal1.charAt(i) - 48) + (tal2.charAt(i) - 48) + carry;
            }
         else
         {
          sum = carry;
         }

        carry = 0;
        if (sum > 9 )
        {
        carry = 1;
           resultat.append(sum % 10);
        }
          else
      {
          resultat.append(sum);
       } 
      i++;
     }
      return resultat.toString();

Laguna Online 30482
Postad: 3 dec 2019 15:27

Jag vet inte om nåt mer är fel, men du tittar aldrig på längden på tal2. Om tal2 är längre än tal1 så missar du siffror, och om det är kortare så blir det runtime-fel.

Maremare 1044 – Fd. Medlem
Postad: 3 dec 2019 15:29
Laguna skrev:

Jag vet inte om nåt mer är fel, men du tittar aldrig på längden på tal2. Om tal2 är längre än tal1 så missar du siffror, och om det är kortare så blir det runtime-fel.

exakt vet ej hur man fixar det har inte kommit så långt än men ska fixa det efter carry problemet

men just att den inte kan räkna någon carry förstår inte varför

Laguna Online 30482
Postad: 3 dec 2019 16:11

Jag ser också att du läser strängen från vänster till höger, men addera ska man göra från höger till vänster.

Maremare 1044 – Fd. Medlem
Postad: 3 dec 2019 18:04
Laguna skrev:

Jag ser också att du läser strängen från vänster till höger, men addera ska man göra från höger till vänster.

okej så jag kanske kan reversa hela strängen innan while loopen? eller ska jag reversa summan när allting är klart?

Lindehaven 820 – Lärare
Postad: 3 dec 2019 19:05 Redigerad: 3 dec 2019 19:26

Du kan låta koden läsa reverserade strängar eller läsa strängarna baklänges (vilket blir samma sak). Det viktiga är att addera entalen först, sedan tiotalen, osv. Observera att strängarna tal1 och tal2 inte nödvändigtvis är lika långa som Laguna skrev så du behöver skriva koden så att den klarar det.

Laguna Online 30482
Postad: 3 dec 2019 19:15
Maremare skrev:
Laguna skrev:

Jag ser också att du läser strängen från vänster till höger, men addera ska man göra från höger till vänster.

okej så jag kanske kan reversa hela strängen innan while loopen? eller ska jag reversa summan när allting är klart?

Summan blir inte rätt om du bara kör på, men det har du ju redan märkt. Du kan vända på strängarna, men rimligare är att kolla på tecknen från höger. Antingen låt i variera från index för sista tecknet, till 0; eller gör nåt med i så att du får indexet för i:te tecknet från höger.

Lindehaven 820 – Lärare
Postad: 8 dec 2019 22:43

Så, MareMare, hur gick det?

Maremare 1044 – Fd. Medlem
Postad: 12 dec 2019 16:28
Lindehaven skrev:

Så, MareMare, hur gick det?

jag reversade båda talen innan loopen sen gjorde jag en ny metod som matchade längderna genom att lägga in x antal nollor framför det tal som här x färre siffror

tusen tack!

Svara
Close