c语言编程:输入一个整数n,计算3.2的n次,要求定义函数计算x^n值

如题所述

可以输入任意数的任意次方 不会有溢出#include <stdio.h>
#include <string.h>
#define x 1000
int main(int argc, char *argv[])
{
char a[10];
long b[x];
long m,pown,n,i,j,k,c,flag,len;
while(scanf("%s%ld",a,&pown)!=EOF)
{
memset(b,0,sizeof(b));
len=strlen(a);
m=j=0;c=1;flag=1;n=0;
for(i=len-1;i>=0;i--)
{
if(a[i]=='.')
{flag=0;continue;}
m+=(a[i]-'0')*c;
c*=10;
if(flag)
n++;
}
if(m==0)
{printf("0\n");continue;}
if(pown==0) {printf("1\n");continue;} j=0;
for(i=len-1;i>=0;i--)
{
if(a[i]=='.') continue;
b[j++]=a[i]-'0';
}
if(flag==0){
n*=pown;c=0;
for(i=1;i<pown;i++)
{
for(j=0;j<x;j++)
{
b[j]=b[j]*m+c;
c=b[j]/10;
b[j]%=10;
}
}
for(k=x-1;k>=0;k--)
if(b[k]) break;
for(c=0;c<n;c++)
if(b[c]) break;
n--;
if(n>k) k=n;
for(i=k;i>=c;i--)
{
if(i==n)
printf(".");
printf("%ld",b[i]);
}
printf("\n");
}
else
{

c=0;
for(i=1;i<pown;i++)
{
for(j=0;j<x;j++)
{
b[j]=b[j]*m+c;
c=b[j]/10;
b[j]%=10;
}
}
for(k=x-1;k>=0;k--)
if(b[k]) break;
for(i=k;i>=0;i--)
printf("%ld",b[i]);
printf("\n");
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-30
#include<stdio.h>
double p(double x,int n)
{
int i;
double s=1;
for(i=1;i<=n;i++)
s*=x;
return s;
}
void main()
{
int n;
printf("输入N:");
scanf("%d",&n);
printf("%lf\n",p(3.2,n));
}本回答被网友采纳
第2个回答  推荐于2017-09-12
#include <stdio.h>

void main()
{
int n;
scanf("%d",&n);
double fun(int n);
printf("%lf",fun(n));
}

double fun(int n)
{
int i;
double t=1;
for(i=1;i<=n;i++)
t*=3.2;
return t;
}

本回答被网友采纳
第3个回答  2013-11-30
#include<stdio.h>double fun(int n){int i;double s=1;for(i=1;i<=n;i++)s*=3.2;return s;}main(){int n;</p><p>scanf("%d",&n);</p><p>printf("%f",fun(n));</p><p>}
第4个回答  2013-11-30
#include <stdio.h>double mypow(double x, int n){ double y=1.0; for (int i=0;i<n;i++)y*=n; return y;}void main(){ int n;double y; scanf("%d",&n); y=mypow(3.2,n); printf("%lf\n",y);}
相似回答