Kezdőoldal » Számítástechnika » Programozás » Egy szám osztóinak az összege...

Egy szám osztóinak az összege C nyelven?

Figyelt kérdés

Elakadtam mivel sehogy sem tudom kiszedni a for ciklusból az osztót és hozzá adni az összeghez. Bármilyen számot beírok mindig 16-ot ír ki ezt miért lehet?


#include <stdio.h>

#include <stdlib.h>


void main() {


int i,szam,osszeg,n;

printf("irj be egy szamot: ");

scanf("%d",&szam);

for(i=1;i<=szam;i++){

if(szam % i == 0){

printf("%d \n",i);

osszeg+i;

}

}

printf("%d",osszeg);

return 0;

}



2021. jan. 17. 14:47
 1/10 anonim ***** válasza:
100%

Ez a rész itt mi?

osszeg+i;


Cseréld le erre

osszeg+=i;

2021. jan. 17. 14:52
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
100%
Az összeg értéke szerintem memóriaszemét mivel nem inicializálod sehol.
2021. jan. 17. 14:54
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:

Le cseréltem a fentire de akkor sem adja jól vissza:

irj be egy szamot: 10

1

2

5

10

34

---

igazából csak az lenne itt a kérdés, hogy hogyan szedem ki a for ciklusból az osztót és adom hozzá egy változóhoz ami jelen esetben az osszeg

2021. jan. 17. 14:56
 4/10 anonim ***** válasza:
70%

Az összeget inicializálhatnád alapból 1 értékre mivel minden szám osztható eggyel és önmagával tehát.

int összeg = szam+1;


A cilusváltozót 2 ről indítod és kevesebb mint szám ig mész

for(i = 2;i < szam; ++i)


Egyébként lehet még optimalizálni ha páros a számod akkor az osztó csak páros lehet így nincs értelme vizsgálni a páratlanokat ugyanez igaz fordított esetben is. Valamint elég a szám gyökéig keresni az osztókat hizs a gyök után ugyanazt vizsgálod csak fordítva.

2021. jan. 17. 15:00
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
Megvan a megoldás, csak inicializálni kellet ahogy fentebb írták. Egy szimpla int osszeg = 0; sorral megoldottam köszönöm szépen. (mégcsak most tanulgatom a nyelvet és feladatokat oldogatok.
2021. jan. 17. 15:02
 6/10 anonim ***** válasza:
100%
Adj az osszeg változódnak egy kezdő nulla értéket. Másrészről én kiíratnám az összeget is az osztókkal együtt (később ráérsz eltűntetni a kiíratásból). Így legalább nyomon tudod követni mi történik az osszeg változóddal a ciklus futása alatt amikor talál egy osztót.
2021. jan. 17. 15:20
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
100%

"Valamint elég a szám gyökéig keresni az osztókat hizs a gyök után ugyanazt vizsgálod csak fordítva."


Helyesbítek nem elég mert itt össze kell őket adni

2021. jan. 17. 15:25
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:
Köszi mindenkinek, ment a zöld pacsi.
2021. jan. 17. 15:35
 9/10 anonim ***** válasza:
100%

@7

Pedig jól írtad, elég a gyökéig menni, így minél nagyobb a vizsgálandó szám, relatíve annál hatékonyabb a kód. Megírta erre optimalizálva (lásd alább). Nem vizsgáltam, páros-e a szám, s az osztók közé most belevettem az 1-et és magát a számot is, stb, mert kizárólag csak azt akartam megmutatni, hogy - legalább egyféleképpen - megoldható, ha a "gyökigmenésig" optimalizálunk:


#include<stdio.h>

#include<math.h>


int main(){


int i, szam, osszeg = 0; float gyokSzam;


printf("Irj be egy szamot: ");

scanf("%d", &szam);

gyokSzam = sqrtf(szam);


for(i=1; i < gyokSzam; i++)

{

if(!(szam%i))

{

printf("%d\t%d\n",i, szam/i); osszeg += i + szam/i;

}

}


if(i == gyokSzam){ printf("%d\n", i); osszeg += i;}

printf("Osztok osszege: %d.\n",osszeg);


return 0;

}

2021. jan. 26. 10:23
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:
100%
Jajj, de szép is lenne, ha lehetne ezt a szöveget (a kódot) normálisan szerkeszteni itt, hogy minél olvashatóbb legyen...... :)
2021. jan. 26. 10:24
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!