Kezdőoldal » Számítástechnika » Programozás » Valaki írna nekem egy olyan...

Valaki írna nekem egy olyan progit c ben,2es bármely beírt hatványát kíirja; például 2 a 345-en az xyz?

Figyelt kérdés
2011. okt. 12. 18:56
 1/6 _Jessy_ ***** válasza:

int pw;

char* result;

int length;

int i;

int k;

printf("Adja meg a hatvanykitevot: ");

scanf("%d", &pw);


length = abs(pw) + 1;


result = (char*)malloc(length);

memset(result, 0, length);

result[length - 1] = 1;

for(i = abs(pw);i;--i)

{

for(k = length - 1; k > -1; --k)

{

result[k] <<= 1;

}

for(k = length - 1; k > 0; --k)

{

if(result[k] > 9)

{

++result[k-1];

result[k] -= 10;

}

}

}

k = 0;

if(pw < 0)

{

printf("2^%d = 1/", pw);

}

else

{

printf("2^%d = ", pw);

}


for(i=0; i < length; ++i)

{

if(k | result[i])

{

printf("%d", (int)result[i]);

k = 1;

}

}

printf("\n");

system("pause");

return 0;

2011. okt. 13. 13:25
Hasznos számodra ez a válasz?
 2/6 _Jessy_ ***** válasza:

Adja meg a hatvanykitevot: 10000

2^10000 = 1995063116880758384883742162683585083823496831886192454852008949852943

88302219466319199616840361945978993311294232091242715564913494137811175937859320

96323957855730046793794526765246551266059895520550086918193311542508608460618104

68550907486608962488809048989483800925394163325785062156830947390255691238806522

50966438744410467598716269854532228685381616943157756296407628368807607322285350

91641476183956381458969463899410840960536267821064621427333394036525565649530603

14268023496940033593431665145929777327966577560617258203140799419817960737824568

37622800373028854872519008344645814546505579296014148339216157345881392570953797

69119277800826957735674444123062018757836325502728323789270710373802866393031428

13324140162419567169057406141965434232463880124885614730520743199225961179625013

09928602417083408076059323201612684922884962558413128440615367389514871142563151

11089745514203313820202931640957596464756010405845841566072044962867016515061920

63100418642227590867090057460641785695191145605506825125040600751984226189805923

71180544447880729063952425483392219827074044731623767608466130337787060398034131

97133493654622700563169937455508241780972810983291314403571877524768509857276937

92643322159939987688666080836883783802764328277517227365757274478411229438973381

08616074232532919748131201976041782819656974758981645312584341359598627841301281

85406283476649088690521047580882615823961985770122407044330583075869039319604603

40497315658320867210591330090375282341553974539439771525745529051021231094732161

07534748257407752739863482984983407569379556466386218745694992790165721037013644

33135817214311791398222983845847334440270964182851005072927748364550578634501100

85298781238947392869954083434615880704395911898581514577917714361969872813145948

37832020814749821718580113890712282509058268174362205774759214176537156877256149

04582904992461028630081535583308130101987675856234343538955409175623400844887526

16264356864883351946372037729324009445624692325435040067802727383775537640672689

86362410374914109667185570507590981002467898801782719259533812824219540283027594

08448955014676668389697996886241636313376393903373455801407636741877711055384225

73949911018646821969658165148513049422236994771476306915546821768287620036277725

77237813653316111968112807926694818872012986436607685516398605346022978715575179

47385246369446923087894265948217008051120322365496288169035739121368338393591756

41873385051097027161391543959099159815465441733631165693603112224993796999922678

17323580231118626445752991357581750081998392362846152498810889602322443621737716

18086357015468484058622329792853875623486556440536962622018963571028812361567512

54333830327002909766865056855715750551672751889919412971133769014991618131517154

40077286505731895574509203301853048471138183154073240533190384620840364217637039

11550639789000742853672196280903477974533320468368795868580237952218629120080742

81955131794815762444829851846150970488802727472157468813159475040973211508049819

0455803416826949787141316063210686391511681774304792596709376

A folytatáshoz nyomjon meg egy billentyűt . . .


Process returned 0 (0x0) execution time : 5.967 s

Press any key to continue.

2011. okt. 13. 13:26
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:

Kitanulmányoztam hogy működik, nagyon ügyes. :) Ez lehet a legegyszerűbb megoldás. Legközelebb légyszi fordítható kódot rakj be main-el együtt stb.

Kicsit korrigáltam a kódon, nem lesz soha kitevő értéke darab számjegyű a szám, elegendő csak annyi memóriát foglalni amennyi számjegyű lesz a szám +1 byte a végjelnek. A "for(i = abs(pw);i;--i)" "for(i = abs(pw);i!=0;--i)"-re írtam át, a kettő ekvivalens, mind a kettőt szokták használni, de ez nekem jobban tetszik.


Vagyis a kód:


#include<math.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main(){

int pw;

char* result;

int length;

int i;

int k;

printf("Adja meg a hatvanykitevot: ");

scanf("%d", &pw);

length=(int)pw*log(2)/log(10)+1+1;

/*length = abs(pw) + 1 Nem szukseges ennyi memoria foglalas */;


result = (char*)malloc(length);

memset(result, 0, length);

result[length - 1] = 1;

for(i = abs(pw);i!=0;--i)

{

for(k = length - 1; k > -1; --k)

{

result[k] <<= 1;

}


for(k = length - 1; k > 0; --k)

{

if(result[k] > 9)

{

++result[k-1];

result[k] -= 10;

}

}


}



k = 0;

if(pw < 0)

{

printf("2^%d = 1/", pw);

}

else

{

printf("2^%d = ", pw);

}


for(i=0; i < length; ++i)

{

if(k | result[i])

{

printf("%d", (int)result[i]);

k = 1;

}

}

printf("\n");

system("pause");

return 0;

}



Csak kíváncsiságból, egyetemen tanultál programozást, vagy közép sulis vagy, vagy ... ?

2011. okt. 13. 17:43
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
Egy gond van: tört kitevőkre nem működik.. :D Szal van még mit csiszolni rajta :D
2011. okt. 13. 18:33
Hasznos számodra ez a válasz?
 5/6 _Jessy_ ***** válasza:

Hát igen, semmi sem tökéletes, egyébként törtkitevőre eléggé körülményes lenne megírni, persze nem lehetetlen. A túl nagy helyfoglalással pedig nem igazán akartam foglalkozni, gondolom PC-re kell a dolog, így az kevésbé fontos... 2^1000000 esetén foglalna ~1 megát, viszont akkor már a számolási idő nagyon sok, én inkább ezen csiszolnék. Egyébként, ha kevesebb memóriából akarod megoldani, akkor írd át, hogy fél bájton tárolja a számjegyeket :)

És igen, programozó vagyok/leszek valóban. Vagy legalábbis szeretnék...

2011. okt. 13. 20:04
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:

Hopsz elírtam "+1 byte a végjelnek" nem kell mert nem string ként iratod ki.


"egyébként törtkitevőre eléggé körülményes lenne megírni"

Nem is lehet pontosan kiszámolni, csak tetszőleges pontossággal közelíteni.


"Egyébként, ha kevesebb memóriából akarod megoldani, akkor írd át, hogy fél bájton tárolja a számjegyeket :)"

"...viszont akkor már a számolási idő nagyon sok, én inkább ezen csiszolnék."

Igaz, de ez nem állt semmiből részemről.

2011. okt. 13. 21:04
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!