Jump to content

AJuda no exercicio de C


GuMarinho

Recommended Posts

Olá glr,estou fazendo uns exercicios da faculdade e travei no penultimo kkkk,vcs poderiam me ajudar?

O exercício pede para desenvolver um programa em C que dado um valor N inteiro e K natural o prog calcule N^k sem usar a função pow( ).

E eu escrevi o seguinte código:

 

#include <stdio.h>

int main()
{

        int n,k,i,r;

        printf("Digite um numero inteiro: ");
        scanf("%d",&n);
        printf("Digite um numero natural: ");
        scanf("%d",&k);

        if(k < 0)
        {
           do
           {
             printf("Este numero não é natural,digite novamente: ");
             scanf("%d",&k);
           }while(k<0);
        }
        else
        {
              for(i=1;i>=k;i++)
              {
                r = n*n;
              }
        }
        printf("N^k= %d\n",r);
        printf("i= %d\n",i);
        return 0;

}


peguem leve cmg,ainda estou aprendendo a programar.

Ps: Só coloquei o "printei o i " ali pra monitorar kkk!Vlw!

Link to comment
Share on other sites

Nada mais simples: Potência, com o expoente natural, são apenas multiplicações sucessivas onde existe um caso especial (quando k=0):
 

int mypow(int N, unsigned int k)
{
  int r = 1;

  while (k > 0)
  { r *= N; k--; }

  return r;
}

Mas, existe um problema com essa função. Como 'int' tem tamanho limitado a 32 bits e admite sinal, os valores são limitados a ±2³¹ (ou de -2³¹ até 2³¹-1). Para evitar isso você pode:

  • Usar tipos integrais com mais bits, como 'long long' ou;
  • Usar ponto flutuante ou;
  • Usar uma biblioteca de precisão múltipla.

Note que a função original pow() usa ponto flutuante:

double pow(double x, double y);

O problema em usar ponto-flutuante é que ele também tem lá suas limitações... Embora os valores possam ser muito maiores, a quantidade de bits de precisão também é limitada. A melhor solução, se quiser exatidão, é usar libgmp (por exemplo):

 

// powmp.c
//
// Compilar com:
//    cc -O2 -o powmp powmp.c -lgmp
//
// Não esquecer de instalar libgmp-dev.
//
#include <stdio.h>
#include <gmp.h>

int main(int argc, char *argv[])
{
  mpz_t r, b, e;

  if (argc != 3)
  {
    fputs("Usage: powmp 'base' 'expoent'\n", stderr);
    return 1;
  }

  mpz_init_set_ui(r, 1);             // resultado.
  mpz_init_set_str(b, argv[1], 10);  // base
  mpz_init_set_str(e, argv[2], 10);  // expoente

  // Claro, isso pode ser escrito como:
  //  r = mpz_pow(b, e);
  while (mpz_cmp_ui(e, 0) > 0)
  {
    mpz_mul(r, r, b);
    mpz_sub_ui(e, e, 1);
  }

  // Libera a memória usada pela base e expoente.
  mpz_clear(b);
  mpz_clear(e);

  gmp_printf("%Zd\n", r);

  // Libera a memória usada pelo resultado.
  mpz_clear(r);

  return 0;
}

Experimente compilar e depois usar:

$ ./powmp 4444 4444 # 4444 elevado a 4444.
51036325037255080482040250195524395924782475482284514747828975986739479076862531615833001864027197875434172496782212810360936998814871028023280409517604289704232997250059817651452033902564981053474342143982434477010055077902971385879578097026795047013927210448069737612599735362894194645352399692361078824902286318374845566910211826792995098340076750261275207380564696757508258866109492489008027054745680387374032086494559412870696129709065543691586334825135439896393158947581127115655037247166912914512319390738590640498634195625879446208894955914635034539916382798196213477934038238442489518643389819322763837231638995434876736816619770138446121390713888522791536946903634459632202283685832172716842435855510281455739906068471774207538472233042602654906987502020125355985174905073230021003332170469140247237244791060151179276706887404173003683055711061565810462576130616749856799781002110356843640353389697516105223217210103014498528306981517615490248684606667345224474348209121691273006311131751894943803682584935085740780294725135881300910139685500678650664234655503263565369409930765042230344332922608368160388778788884646783931717914556412663681132017810017876756080237495986180628149778075630681683591162326934481582867517270565879385831508832179085202869797913623439391361789109534083973333868667373983317982638572836694588790263878531057321976457926706035794868607608000143128674258835749966110713648807550164642010195262398183937258284226451876181050405347824263231418489797089530605962873018298377904732924409245273472327709725894372282581058105524768663834139458191519630744589334410903481777861176889172389729459938914093278379923249077505369097142894400504292204972847535451294121869487522728274420380832944409608875582828867828954197345766989736271752262574052524120907677713841267414723824130389733862221839461701104193136612118363646182343780367533924798552314345440639416532935766910365326476064001062650439978986012613987836953446823328289018854743984831229989513368552344528366528946668277450956579664476698698885070608528868908111446990296036082707295422437498210126018245317186940472025919131910253989876920575814124256871659639320221224077385578352633571849429475276431189292090749302555041209922023332951651543444331299226763535432904707263476043787719983745748717480573667954495246311916624921943890202395518185431320767988580847947776915325464644299195013041220210205633708318303125892843920543505189879552980904823153381789682321967075253543745292851858094342413804502283186371602546057238458117043544418057384120943532580155301403058643552474493180342399235704855733869062287425023484735796769739544602182545742884488193642040911298424695109308187173595023672783492809262968798087358959434038837430012625131591133659217967823611347405958524526761075933856486406418498051232221083011321212500132046393237242013712920493373344264333908560825994557724645284878202710188644471617856313308716424505617800507511537779281500711830120905910660921253482993943955008380295422529597530517295272711434751373008436807762561135017027186247688032009272581704436132546155134721473880825079177160955223780677219678433502729700278074401926182830254603399513829993142929857388403374970772760874169394709868564511659882097055434991242192905557305121043626131448358657169258733625263781589882596980551044501739635559777554180414767408625727263397938235392611846506923430547435639632653715759798163299353598450502659980053847341549979536485533374417981344585777831913637495528436408273284344143251860794994623002364275788357898174586933809803529995199669549788973653323309952532823803289549965974624000722832093785514980924652516482515851200807081969699906466651892169655557373657152851157852684704918682011477489156069723781227666168420881320735023475233908968720310190825736586213239037243220048657578805360944016440781006626608828743161303712574375577649933225532651050545140041874017741023508427656767689065668130401769027151944649429611356508622419636497843616839733378873568423125359771873606835205422792731727757560994851502223732734474706040309843864498501849591435827118166412237796262100139892025690084293327010312257645197663545951270607774391829880728221106093312903241196615084223406747347511355606911250776846847504818687953378149563999211135192267588652390035544532377329198071915314030957493059007692692874887653124427108176927564311114294162352327908126401618689986841523872090872302734801513886689193125816660511991658004864418535953189435072045784455379328488152720292135875359370818523073632235999955560096920959353029918712650480503579008169962642053112282387206511169150739976823577289086369441166995256367827923437835419123223095040378846316251345016228949289846720433174619937560455378596315532968385243164693560657516484944148695965324488849710057293245594493054144125301383618793154325438553456395029494822177859020897215350982592844274046353318091605614965118200898804114383826069406964847820436615643622261068438963617832290603017594755753950537202287361798424395102761325628740511493400108171212718709005382511978898908061126898933058880219555439576974738382113216437342135362672263231535922196636242632966267617797782349620766549519091205877407003046124006500309222034053734371857085554062004840926832652467921080208750743403635646914790187985334984952875123511778001857103061245386249082763461716843192378489618317944998120036331318092652006012655130682372475987291362466779491036392406652011434125908300172201075459301413967064063793126812807083864221177194505056136652580844744952550893816626476519936322862192707218970681132239377168147183801211896926748464951769597450998551868070718635711806666915579910070198897425652999349587462404531631120464229738379300920201111657804964599629952724701542323391985340968672860060669633034275225674155618588182641024574391062865746589017549671210242135692320276909192356449001140429332424010168704728232320210929716937724676749800381376170596003069426771858245290325607901081526368109316668763096997126363181245813507244280366466648932281278126373785395043601786432763709030702050240133828986390880385273986929569720458072517096795027305471085938668807654698948015622573546046818183483574210076476424314126971168689392674121509101918246504955993884315209282001301719021966321013395976496991692142425223535087917565596507435924991158667497528161617132634459787384459450622411723302480664154065560531934085200935012479292867804537504330578796940153305865857778470211005882087304011121903516957099176167592117789488946853013045527375124867065686043038426322857813366803015786294145632248001337459688483691257344667756808810763951697589291515089178471233746391308443723682518279979337718359309060602693690330560121274254701058674348091423932473471398090502843038552335985443303218444128273168445461544525875847301549067496633454966410289829207039237131199496320982864323114758277687079589482127307018838909473086361470174425155605416098610793082610666882657741882553093188048486176434501614955495508196228299583835839675502532332523762696463804129678278859082482642272742222097523888921494943635753659083340054406237245675282501632433166910819140004835672664626254656945100198177609726761793938744998764132255609836841281231901889255720627632431524563414335794855387940638983921578668572820626365369332486298710663838352786326156749468726583817126773838140775866868854750410164553462469660109474243903272165419456237431085185448995866389189328684026079146101209558854111512784423513653846049421844315706794473017508719299331262442774780215604164214935781680800812113054855039739695535889689222983145176553378931813476808180181797746175127362657263172858532527445330795453630817313353805947445272602272859755128165350245699909282790812350142389739532001665264106145203494315060714077572377651146115787312307022512064449340241437064714428811461627661296148383624217245891852900460888364100406842157821779342842799355931512314718480199341284989806192064245013731802940320169314921465098996439607567827091299243886276832382975543758070963117789490624658461677581830470547198581652714163917981803161039869381247440996205213843179071365997185244849515709324465993580039825588779376403826196295376733980918034760186594327868964300163072070993667608137198439745894622830964670577357068140987913016472869332701745194728354414343987240775197183872184550997575711793283765248345696798544187751342612045080852628322021167977131912613038625008119849405429846694204887183172236242862288336790947712149061901220691463054655089364006898766280700111034085106069195942699996386257700056260174925237978902361628738183989737266536727656590186430086434104066899555984970430626699113393427759387535749682565485768733441976884012572940596856108887084493032729826238476610059812287841531681857742998664623258592919034850034756201558892775431988955545940511717158950554954860345959045710296346475477063086888136584311637100547898320415124284265050681611051509889545401120651624439122149764963968586574661359990455143110351913216521923238429980060786470727081816974969662410355488759308751155688931603175675838361935384326896619910401449935129538122817672871284002069273657674924148759715545901520947799114857656365404517318216715752365065243367980748870682553424957994182472477713721428412348500101323193437431770561481293771535815709700685601018988749699883796533380321551925970404211930703722814870147383043024350899076127839345055871818704915007022774623079583527294569519281380166147885655120004808523674310827725908874355002546657148457905053710323471032819923409475939303215234009696145468912877845444157428705725324269845118873307464750432702122363395708402813809266954445176416954050680390634404210721669270148110359745913179060623012183796034241442179864616637695398581278100443251513690190181608320197277957618618586103065843536903624585752721123072857484407001884695763104141852277787972331578007675974547534573051951675906287766232009077477009546299446114266148470853908985123009587555416972420221903757359950808721119718945202840731462726074950456726607369310800455523431774350442213764016387077276359397016795922323725222901757153393011002060910029626440636176239631950675089440294878401209867584496575479711689428392243002505742111285596689605354395073160765101186669200734842212683905358670429099456243262253207006194135528550831443774697840270729765763865401704965526590154726344992320309370696654772892880071351360611510079210660932423971138399311431421606107840277299308273681650706193685031204873415626123871788097831614964837590750823014964899520356299704559323275867818027880127178486971621826278303747456446269574866139129639109358738377276422155594326438226169115877710436415645241987304828870116028499639671621994432850792792265735019599993566923884747402162984414837265474645422356266002319780424780147840969885140237391862816439274529266133603892293872737639942238386916549505056622083083415928604605207659078623922547539643137607474464319868682774108046036631332560331327300717805862387838377162637617721381297418828788660000781831056361132773258934511662510049881698861900002425638322034083939517994043478227728724295818945414834121714638146161878458019249031232371077414060402468422371937149715681222275398116480010314713558625215596616468213210374517443850091715843079931522392153420229680048107366236906295197876902156234699932349027319276916186058329891573414313930428139555607919185190192389026056754929979302853958702886809773264745270796960183896245081350167326097763616039648753718725043830604194573415686556600904870474281097770232715993612793452983751496048549462024037030844508461707716072580399971349621270052737137833658105075643155272907595634443397421469710649589262478442474566724655969237120567845173418487762529440470229826695351272351294187278674957707502579670113762088486028927784199370456347878691364433162777744786870921031106518425844847931802318562143332162520586346376456214070002688736307063902638559148762788885343158956151797160107229661535733236486906762444067357474700997689101798161821428599649047752008815011514252844401816390424939585076205770589130004893645483641205584855883437744219703265734558514891267367080566267177288856805929998542256170860899494621508896364262009894660347512295257564856824890863382434289515954119435096457264634163644236916357390300378249516703332441368795061603944615807261982939505169099549073403188197221152637551597797951899683802449992409721428975183334578242666063517989340779988831472254946386047542780245023658860765336496396822462566380797706697056663267407242235449458534274651549579038743453915060277698885822973565586155765167400142931681208960899520371746560263829733583002620608328776408718158974097912755867301616673172872759418076664771180865159631798289178303532975347895035244536490025898135468963734500935569457512018474988806072324386391061095193617300563206349073421620131728842913657903246403571683953425204050878567348050563090389404172621103208845718114249781810625452672558925511250819360719595221672007862281984896444963254344123787497849024307172940520733149573313075557659925817664518441365261903347584532027572313309166188768274469438897797394969560355643211282919298080817690302382931052348206926321238904454198458118882210844822821363250357160391035907409711016857753591754468457688678088321482461731200445430768369046913591664767360089561928710085247927451471873596148752021313132678954452831023222988644694023933547158459272958964295398376115799910819417647828969677454032733360536723683214239170801207540657917395767079520734706539336317218188133109617778494291033280332817298844009428762531379612090145665038681510331917044253681161508700847119333958905296076499022356627365628010677726414340197056935602884040529960714256615145318404634297127907604465376429821155871081078665860527464878174828520506755881803641306438556538929542141958276824040748103136131211043691875023167075278822614343733796147190873169032205057260660344051067670429791992768652121913012521895059954551934047574800474904940010386563480489601958856487597748035536266648853742616961247934312465257745919735863190157531585430834131280398072320212966438382726175971311473127537745975213829044332350770984210525299185708953351516865858946612926840982398173154295235614371586316968868491360496700812212595701439490210485473139451398738165361282564989954513670435629923361237766313894962667476400381212165797730667874517027687375116051403282191571642956851650744922280646722074409834586593409233415022286762159459328347222899559242786219779579930883009193720491507988997151488555749670957360377705149503185077715180665444890518474846889711571541722584536374641569673356220830218907187400703661820710744159795145430352606015586615812921953986990749712371499322637865469171905713409497806437169004073344390361842501998570576229005993048420239096466308003448561017891340796167476073409143310036770948357403595929728871809533713636885391034647953563506410771549598669770607418612354486493048298257948324887092854280399996890575308141248091008684366391354350674635484268923258256874102915532038525363411814408562397598290284948264197305607031527537149786611423133118137166592048111327237521203819213296822190711384463234160193281284038243499433934205984075209327378314363350734284703872432542440047773545621263050059236121609644953384843066158004055268131195162416597382498798221282586951443827655466888011743230631174901668327358833149356764473022631844515870522794824314237233941605095215812377218718826428420878793242691427557719645257656471723055812922503746623901061436676816104290290411956041565447224539823415337843718907208314976358463130113654469290336305497409416174328035261292190893517872125591526291255132402239597336963894075033663474001477666944264153938660710673204098680669154124930538019930270047306104736552258986276965824647429655406555391473259064044331026222236793090208071454927204540098309770823362234251861977421278895089070563986599332469931277104734673626799143422660333436774839058609616838679119492166312585602686546299548163918419928636745017142259954187355586887636003568084241221478621695307152384094531375297756356083583426234545493926295612017618527949708463952945505173247787325422994467678743279370416826869347245921635509244741066157981696

Isso você não consegue com 'int's ou 'float's...
 

Link to comment
Share on other sites

#include <stdio.h>
int main ()
{
    //CRIAÇÃO DE 4 VARIAVEIS INTEIRAS COM VALORES INICIAIS, O MOTIVO É QUE SE NÃO TIVER NENHUM VALOR ATRIBUIDO Á VARIAVEL O COMPUTADOR IRÁ ATRIBUIR UM VALOR QUALQUER APENAS PARA RESERVAR UM ESPAÇO NA MEMORIA
    int base, expoente,i, resposta;
    //PODEM SER 0 OS VALORES DA BASE E EXPOENTE JA QUE O VALOR SERÁ SUBSTITUIDO POR ALGUM VALOR DIGITADO PELO USUARIO
    base = 0;
    expoente = 0;
    
    //CONTADOR QUE COMEÇA EM 1 SÓ PRA FACILITAR A CONTAGEM
    i = 1;
    
    //RESPOSTA COMEÇANDO COM 1. TODO NUMERO MULTIPLICADO POR 0 RESULTA EM 0
    resposta = 1;

    //LOOPING INFINITO PEDINDO BASE E EXPOENTE PARA O USUARIO
    while(1)
    {
        printf("Digite uma base: \n");
        scanf("%d",&base);
        printf("Digite um expoente: \n");
        scanf("%d", &expoente);
        
        //SE O EXPOENTE FOR MENOR QUE 0 A EXECUÇÃO VOLTARA PARA O INICIO DO WHILE
        if (expoente < 0)
        {
            printf("Por favor digite um valor valido para o expoente...\n");
            
            //COMANDO QUE RETORNA A EXECUÇÃO PARA O INICIO DO WHILE
            continue;
        }
        else
        {    
            //SE O EXPOENTE NÃO FOR MENOR QUE 0 ENTÃO É MAIOR
            //COMANDO PARA PARA SAIR DO LOOPING INFINITO E PROSSEGUIR COM A PROXIMA INSTRUÇÃO DO
            break;
        }
    }


    //LOGICA PARA CALCULAR
    
    //ENQUANTO O I (CONTADOR) FOR MENOR QUE O VALOR DO EXPOENTE
    while(i<=expoente)
    {
        //NOSSA VARIAVEL RESPOSTA RECEBE ELA MESMA MULTIPLICADA PELA BASE
        resposta = resposta * base;


        //NOSSO CONTADOR SERÁ ELE MESMO SOMADO A 1
        i = i +1;
    }

    //QUANDO I > EXPOENTE SERÁ APRESENTADO A BASE, EXPOENTE E A RESPOSTA
    printf("%d elevado ao expoente %d é %d.\n", base,expoente,resposta);
    return 0;
}

Fiz essa resolução, vai servir nem que seja pra ver rsrsrsrs.

Se tiver problemas em entender o codigo que fiz, tente fazer um teste de mesa enquanto vai seguindo cada linha lida. Isso ajuda bastante a deduzir o resultado final do programa m/ m/


 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...