Kezdőoldal » Számítástechnika » Programozás » Miért bugos a programom?

Miért bugos a programom?

Figyelt kérdés

Feladat: Adjuk össze egy legfeljebb 100 jegyű természetes szám számjegyeit! Ha a kapott szám nem egyjegyű, akkor ennek újra adjuk össze a számjegyeit, s az eljárást folytassuk, amíg egyjegyű számot nem kapunk. Egyes kiinduló számok esetén a végeredmény 1 lesz. Nevezzük ezeket a kiinduló számokat "egyes" számoknak.

Készíts programot, amely beolvas egy természetes számot, majd kiírja, hogy a szám "egyes" szám-e!


Program:

#include <stdio.h>

int main() {

int a, b = 0, c = 0;

printf("Adj meg egy szamot!");

scanf_s("%d", &a);

while (a >= 10) {

while (a > 0) {

b = a % 10;

a = a / 10;

c = c + b;

}

a = c;

c = 0;

}

printf ("%d",a);

if (a == 1) {

printf("EGYES");

}

return 0;

}


Probléma: 13, vagy több karakterű számoknál rosszul adja az eredményt. Mi lehet az oka?



2016. máj. 3. 20:29
 1/4 anonim ***** válasza:
100%

Az az oka, hogy a C integerje 2-4 bites:

[link]


Egy 100 jegyu szamot csakis tombben tudsz tarolni. Ez lehet char tomb (es akkor a karaktert szamma alakitod, ezeket szummazod), vagy lehet short int tomb - igy csak a tomb elemeit kell szummazni.

2016. máj. 3. 20:36
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
*bit -> bajt
2016. máj. 3. 20:36
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:
Értem! Köszi a rohadtgyors, jól érthető választ!!!!!
2016. máj. 3. 20:51
 4/4 anonim ***** válasza:

Pontosítanék a válaszon. Az int típusra csak annyi megkötés van hogy legalább 2 bájtnak kell lennie. A méretét a fordítók választják meg célszerűen úgy, hogy az megegyezzen az architektúra szó méretével, azaz a regiszterek méretével amire általában optimalizálják a CPU egyes műveleteit, ezzel nagy sebességet elérve. 16 bites CPU-n ez 16 bit, 32 bites CPU-n ez 32 bit, és 64 bites CPU-n lehet láttam már 32 és 64 bitesnek is (valószínűleg hogy visszafelé kompatibilis legyen a kód). Ha nem számít a memória, érdemes mindig int típust használni a számításokhoz.


Ha ez nem elég, akkor használhatod a long long int típust ami legalább 64 bites (C99-től), vagy akár te is megadhatod az int méretét, az stdint.h headerben deklarált típusok egyikével ( [link] ).


Ha ennél nagyobb kell akkor léteznek bigint könyvtárak pl. GMP ( [link] ) amiben nincs limitáció a méretre, viszont használata körülményesebb és sokkal lassabb.


A beépített egész típusok méretei a limits.h headerben van definiálva amit megnézhetsz itt:

[link]

2016. máj. 4. 22:38
Hasznos számodra ez a válasz?

Kapcsolódó 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!