# Native Code > برنامه نویسی با C > برنامه نویسی با زبان C و ++C > مبتدی: به توان رساندن اعداد

## sm_mojtaba

سلام من تازه برنامه نویسی رو با زبان C آغاز کردم یک سئوال داشتم. ممنون میشم اگه جواب بدید.
1.برنامه میخوام که دو عدد صحیح a , b رو گرفته و a را به توان b  برساند؟

----------


## Arcsinos

خب شما اول باید اول اگوریتم توان رو بدونید . و این رو هم بدونید که توان برای اعداد مثبت همیشه بزرگتر مساوی 1 هست پس اولش توان یا همون pow را برابر 1 قرار میدیم .

بعد یه حلقه مینویسیم که به تعداد b بیاد pow*=a کنه و در آخر هم pow رو چاپ کنه . من توضیح دادم چون قرار دادن کد خلاف قوانین سایت هست . خودت پیاده سازی کن .

----------


## یوسف زالی

سلام. این رو تست کن:

c = exp(b*ln(a)) // a be tavane b

----------


## shahmohammadi

الگوريتمتون درسته ولي در زبان سي لگاريتم بر پايه نپر به صورت log نوشته مي شه نه ln.
با تشكر.

----------


## mahak006

این کد برنامه ای هست که*Arcsinos* در مورد الگوریتمش براتون نوشتند .

#include<iostream.h>
int main()
{
int a,b,pow;
cin>>a>>b;
pow=1;
for ( int i=1 ; i<=b ; i++ )
pow *= a;
cout<<pow;
return 0;
}

----------


## as-soft

> این کد برنامه ای هست که*Arcsinos* در مورد الگوریتمش براتون نوشتند .
> 
> #include<iostream.h>
> int main()
> {
> int a,b,pow;
> cin>>a>>b;
> pow=1;
> for ( int i=1 ; i<=b ; i++ )
> ...


 دوست عزیز میشه بگی به وسیله توابع این کار رو باید کرد؟

----------


## Arcsinos

بله میتونید . مثلا تابع power رو از نوع int تعریف کنید اینطوری (int power(int a,int b بعد بیایید کد بالا رو توش بریزید اینطوری 
{
pow=1;
for ( int i=1 ; i<=b ; i++ )
pow *= a
return pow
}

حالا تو int main بعد از اینکه a,b رو گرفتید بنویسید (cout<<power(a,b موفق باشید .

----------


## یوسف زالی

با کدی که شما نوشتید توانهای صحیح قابل محاسبه هست.
اما یا EXP توانهای اعشاری هم محاسبه میشه.مثل 2.4^3.2

----------


## irpersian20

> با کدی که شما نوشتید توانهای صحیح قابل محاسبه هست.
> اما یا EXP توانهای اعشاری هم محاسبه میشه.مثل 2.4^3.2


 #include <iostream.h>

double power(float,float);

 int main ()

  {

  float a,b;

      cin>>a>>b;

      cout<<power(a,b);

     }

double power (float a,float b)

 {

  double p=1;

  for (int i=1;i<=b;i++)

  p*=a;

  return p;

  }

----------


## یوسف زالی

irpersian20 جان منظور من float کردن عدد ها نیست.
شما با اون کد نمی تونی به توان نیم رو حساب کنی.

----------


## quiet_programmer

با سلام.

برای به توان رساندن یه عدد به عدد دیگه میتونین از تابع تعریف شده در Math.h هم استفاده کنید:

#include <iostream.h>
#include <math.h>

void main()
{
    int a,b;
    a=3;
    b=2;
    cout<<pow(a,b);
}

همچنین میتونین خودتون بصورت دستی و با استفاده تابع بازگشتی پیاده سازی کنید:

#include <iostream.h>
#include <math.h>

int Power(int a,int b)
{
    if(b==0)
        return 1;
    else
        return a*Power(a,b-1);
}

void main()
{
    int a,b;
    a=3;
    b=2;
    cout<<Power(a,b);
}

همچنین دوستان هم روشهایی رو که گفته بودن همگی درست هستن.

اگه اینا کارت رو را نمیندازه بگو در اصل چی میخوای تا همونو بدیم بهت
موفق باشی

----------


## shahmohammadi

اینهم یه الگوریتم سرسعتر برای توان(البته برای توان های صحیح):

long square(long n){return n*n;}

long fastexp(long base, long power)
{
   if(power==0)
      return 1;
   else if (power%2==0)
      return square(fastexp(base,power/2));
   else
      return base*fastexp(base,power-1);
}

----------

