10 svar
965 visningar
Farbrorgul 408
Postad: 18 jan 2021 19:45

Beräkna summa av omvända tal

Skriv ett program där man kan mata in två tvåsiffriga heltal och som beräknar summan av heltalen.
Låt även programmet vända på talens heltalssiffra och tiotalssiffra och beräkna en summa av de omvända talen.
T.ex. 

Input:

Skriv två tal:

23 

45


Output

Summan är:  23+45=68

Omvänd summan är:32+54=86

 

Jag har löst uppgift a) men förstår inte hur jag ska göra på b). Är det någon som kan hjälpa mig förstå hur jag ska tänka på denna?

using System;

class MainClass {
  public static void Main (string[] args) {
    Console.WriteLine ("Tal 1: ");
    double tal1 = double.Parse(Console.ReadLine());
    Console.WriteLine("Tal 2: ");
    double tal2 = double.Parse(Console.ReadLine());
    double summa = tal1+tal2;
    Console.WriteLine("Summan av talen är " + summa);
  }
}
Laguna Online 28582
Postad: 18 jan 2021 20:11

Undrar om det är bra med 'double' här. Det fungerar nog, men det handlar ju om heltal.

Så om vi räknar med heltal, vad blir 23/10? Har du nån hjälp av en sådan operation?

Farbrorgul 408
Postad: 18 jan 2021 20:30
Laguna skrev:

Undrar om det är bra med 'double' här. Det fungerar nog, men det handlar ju om heltal.

Så om vi räknar med heltal, vad blir 23/10? Har du nån hjälp av en sådan operation?

Skrev int först men ändrade sen till double programmet reagerade (dock av en annan anledning visade det sig). Menar du att jag ska använda modulus-operatorn? Heltalet blir ju annars 2 för 23/10

Laguna Online 28582
Postad: 18 jan 2021 20:33

Modulo är bra. Men man kan klara sig utan den om man bara använder heltalsdivision.

Ett helt annat sätt är att ta textsträngen som talet utgör och plocka ut första och andra tecknet och byta plats på dem.

Farbrorgul 408
Postad: 18 jan 2021 20:43
Laguna skrev:

Modulo är bra. Men man kan klara sig utan den om man bara använder heltalsdivision.

Ett helt annat sätt är att ta textsträngen som talet utgör och plocka ut första och andra tecknet och byta plats på dem.

Det var mitt initiala försök men jag förstod inte riktigt hur jag skulle göra då. Ville få siffran på plats 2 på plats 1 och siffran på plats 1 på 2:

int omvänt1 = tal1[2,1]

Laguna Online 28582
Postad: 18 jan 2021 21:09

Nu kan inte jag C#, men det där ser inte ut som om det skulle kunna fungera.

Snarare nånting klumpigare i stil med

char c = tal1[0];
tal1[0] = tal1[1];
tal1[1] = c;

Men det är inte heller rätt, för tal1 behöver vara en sträng då. Om du deklarerar en variabel "string x" som du sätter till Console.ReadLine() så fungerar det nog (och sen gör double.Parse(x) eller kanske int.Parse(x)).

Lindehaven 820 – Lärare
Postad: 19 jan 2021 15:24 Redigerad: 19 jan 2021 15:34

Modulo och division går utmärkt att använda. Koden för detta kan se ut som i denna metod som vänder ett tvåsiffrigt heltal:

  private static uint Reverse2Digits(uint number) {
    return (10*(number%10) + (uint)(number/10));
  }

EDIT: Tog bort min utläggning om hur heltal avrundas. Det är irrelevant i detta problem.

Laguna Online 28582
Postad: 19 jan 2021 15:32
Lindehaven skrev:

Modulo och division går utmärkt att använda. Man får dock komma ihåg att heltals-division i C# avrundar mot noll. Det kan man enkelt lösa genom att (på klassiskt vis) utföra divisionen, addera 0.5 och sedan typkonvertera till heltal. Koden för detta kan se ut som i denna metod som vänder ett tvåsiffrigt heltal:

  private static uint Reverse2Digits(uint number) {
    return (10*(number%10) + (uint)(number/10+0.5));
  }

Varför skulle (uint)(number/10+0.5) bli något annat än number/10?

(Din kod är en bild, så det går inte att kopiera från den. Var det meningen?)

Lindehaven 820 – Lärare
Postad: 19 jan 2021 15:36
Laguna skrev:

Varför skulle (uint)(number/10+0.5) bli något annat än number/10?

Det blir den inte, jag skrev fel.

(Din kod är en bild, så det går inte att kopiera från den. Var det meningen?)

Jag använde "Infoga programmeringskod" så det bör vara text.

Laguna Online 28582
Postad: 19 jan 2021 15:41
Lindehaven skrev:
Laguna skrev:

Varför skulle (uint)(number/10+0.5) bli något annat än number/10?

Det blir den inte, jag skrev fel.

(Din kod är en bild, så det går inte att kopiera från den. Var det meningen?)

Jag använde "Infoga programmeringskod" så det bör vara text.

Ja, men det blev lite förvirrande när man citerar och ska kopiera. Då ser det ut som en bild. Men man kan dubbelklicka på den så får man ett nytt fönster med texten i.

Lindehaven 820 – Lärare
Postad: 20 jan 2021 12:41

Farbrorgul, kärnan är denna:

10*(number%10) + number/10

Förstår du hur den fungerar?

Svara Avbryt
Close