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;
}
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);
...
}
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.
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
Okej tack!
du kan göra en liten funktion som räknar ut pow istället för att använda double pow(double,double)
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?
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));
}