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();
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.
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
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.
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?
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.
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?
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!