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?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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;
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
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 ... ?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
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.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!