7 svar
106 visningar
erze7811 102
Postad: 2 jan 2023 16:30 Redigerad: 2 jan 2023 16:40

pot uppgift kattis

 

Jag försöker lösa denna uppgift där man ska skriva in en antal tal men den sista siffran i talet ska hamna som exponent till de siffrorna innan och sedan räkna ut summan av alla dessa. Jag har kommit en bit men vet inte hur jag ska få få summan av alla tal.

Detta har jag skrivit hittils:

#include <stdio.h>
#include <math.h>

int main() {
    char buffer[100] = {0};
    int n = 0;
    int num = 0;
    int rest = 0;
    int sum = 0;
    int bas = 0;
    fgets(buffer, sizeof(buffer),stdin);
    sscanf(buffer, "%d", &n);
    
    for(int i = 0; i < n; i++) {
        scanf("%d", &num);
        rest = num % 10;
        sum += pow(bas,rest);
    }
    printf("%d\n", sum);
    
    return 0;
}

 

anders_k 237
Postad: 2 jan 2023 18:58 Redigerad: 2 jan 2023 19:00

Du kan läsa in talen som strängar istället, så blir det lättare att manipulera och eftersom talen står på olika rader, använd fgets istället för scanf.

När du väl har en sträng kan du hitta sista siffran och ta ut den, använd atof för att få värdet på det eftersom pow tar double som argument.

E.g.

fgets(buffer, sizeof(buffer),stdin);
char* p = strchr(buffer, '\n'); // eller loopa
if (p != NULL)
{
  *p = '\0'; // ta bort \n
  --p; // nu pekar p på sista siffran
  double exponent = atof(p);
  *p = '\0'; // ta bort exponenten
  double bas = atof(buffer);
  ...
}
Laguna Online 30711
Postad: 2 jan 2023 19:18

Jag tycker att det är lättare att arbeta med %10 och /10.

För att utföra potensberäkningen kan man använda en for-loop.

anders_k 237
Postad: 2 jan 2023 19:22 Redigerad: 2 jan 2023 19:47
Laguna skrev:

Jag tycker att det är lättare att arbeta med %10 och /10.

För att utföra potensberäkningen kan man använda en for-loop.

Jo det tycker jag nog också, tänkte bara visa en alternativ approach

 

erze7811 102
Postad: 3 jan 2023 09:33

Okej tack!

anders_k 237
Postad: 3 jan 2023 11:45

du kan göra en liten funktion som räknar ut pow istället för att använda double pow(double,double)

erze7811 102
Postad: 3 jan 2023 13:30

Hur skulle det fungera isåfall? Att man tar alla siffror förutom den sista och multiplicerar den med sig själv lika många gånger som den sista siffran i det ursprungliga talet?

anders_k 237
Postad: 3 jan 2023 21:31 Redigerad: 3 jan 2023 21:31

Något sånt här

long mypow(long compound)
{
  long bas = compound / 10;
  long exp = compound % 10;
  
  long sum = 1;
  for (long i = 0; i < exp; ++i)
  {
    sum *= bas;
  }
  return sum;
}

// sen läser du bara in med

int sum = 0;
for (int i = 0; i < n; ++i)
{
  fgets(buffer, sizeof(buffer),stdin);
  sum += mypow(atol(buffer));
}
Svara
Close