8 svar
72 visningar
Maremare är nöjd med hjälpen!
Maremare 367
Postad: 3 dec 2019

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 6679
Postad: 3 dec 2019

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 367
Postad: 3 dec 2019
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 6679
Postad: 3 dec 2019

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 367
Postad: 3 dec 2019
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 236 – Leg. Lärare
Postad: 3 dec 2019 Redigerad: 3 dec 2019

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 6679
Postad: 3 dec 2019
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.

Så, MareMare, hur gick det?

Maremare 367
Postad: Igår
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 Avbryt
Close