3dmax2017英文版安装:2的x次幂的值..大家来看看

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 04:12:34
题目:
用C语言实现以下功能:
输入: 十进制整数(值域 -1000 <= x <= 1000 )
输出: 2的x次幂的值,要求用科学计数法记录,精确到64位,低于64位直接显示
要求:
不得使用C语言的库函数直接求解2的x次幂的值请考虑使用乘除或者移位)
输入整数超过值域:提示输入超过值域
输入小数:提示输入错误只需要判断数值型,不需要考虑其他输入
提示:
2的1000次幂是1.07150860718626732094842504906e+301
2的-1000次幂是 9.3326361850321887899008954472382e-302
基本的数据类型无法满足精度的需要,可以考虑用数组来增加运算的精度,在数组的相邻元素之间进行进位和借位的处理

#include "stdio.h"
#include "string.h"
#define MAX 1001
int num[MAX],n,b;
int isos(int a)/*判断是否是偶数*/
{
switch(a)
{
case 0:
case 2:
case 4:
case 6:
case 8:return 1;
default:return 0;
}
}
void chengfa(void)/*以前写的,没有优化,效率可能不高*/
{
int i;
for(i=1;i<=num[0];i++)
{
num[i]*=2;
}
for(i=1;i<=num[0];i++)
{
if(num[i]>9)
{
num[i+1]+=num[i]/10;
num[i]%=10;
}
}
if(num[num[0]+1]>0)num[0]++;
}
void chufa(void)
{
int i;
for(i=num[0];i>=1;i--)
{
if(isos(num[i])) num[i]/=2;
else
{
num[i]/=2;
num[i+1]+=5;
}
}
if(num[num[0]+1]>0)num[0]++;
}
void zjisuan()
{
while(b<n)
{
chengfa();
b++;
}
}
void fjisuan()
{
while(b>n)
{
chufa();
b--;
}
}
void zprint()
{
int i,r[MAX];
memset(r,0,sizeof(r));
r[0]=num[0];
for(i=1;i<=num[0];i++) r[r[0]+1-i]=num[i];
printf("%d.",r[1]);
for(i=2;i<=64;i++) printf("%d",r[i]);
printf("\be+%d",r[0]-1);
}
void fprint()
{
int i=1,j;
while(!num[i]) i++;
printf("%d.",num[i]);
for(j=i+1;j<=i+64;j++)printf("%d",num[j]);
printf("\be-%d",i-1);
}
int main()
{
memset(num,0,sizeof(num));
b=0;
num[0]=1;num[1]=1;
printf("请输入指数:");
scanf("%d",&n);
if(n>0){ zjisuan();zprint();}
if(n<0){ fjisuan();fprint();}
system("pause");
return 0;
}

为什么总是无法修改呢?只好换个马甲来答了。
#include "stdio.h"
#include "string.h"
#define MAX 1001
int num[MAX],n,b;
int isos(int a)/*判断是否是偶数*/
{
switch(a)
{
case 0:
case 2:
case 4:
case 6:
case 8:return 1;
default:return 0;
}
}
void chengfa(void)/*以前写的,没有优化,效率可能不高*/
{
int i;
for(i=1;i<=num[0];i++)
{
num[i]*=2;
}
for(i=1;i<=num[0];i++)
{
if(num[i]>9)
{
num[i+1]+=num[i]/10;
num[i]%=10;
}
}
if(num[num[0]+1]>0)num[0]++;
}
void chufa(void)
{
int i;
for(i=num[0];i>=1;i--)
{
if(isos(num[i])) num[i]/=2;
else
{
num[i]/=2;
num[i+1]+=5;
}
}
if(num[num[0]+1]>0)num[0]++;
}
void zjisuan()
{
while(b<n)
{
chengfa();
b++;
}
}
void fjisuan()
{
while(b>n)
{
chufa();
b--;
}
}
void zprint()
{
int i,r[MAX];
memset(r,0,sizeof(r));
r[0]=num[0];
for(i=1;i<=num[0];i++) r[r[0]+1-i]=num[i];
printf("%d.",r[1]);
for(i=2;i<=64;i++) printf("%d",r[i]);
printf("\be+%d\n",r[0]-1);
}
void fprint()
{
int i=1,j;
while(!num[i]) i++;
printf("%d.",num[i]);
for(j=i+1;j<=i+64;j++)printf("%d",num[j]);
printf("\be-%d\n",i-1);
}
int main()
{
memset(num,0,sizeof(num));
b=0;
num[0]=1;num[1]=1;
printf("请输入指数:");
scanf("%d",&n);
if(n>0){ zjisuan();zprint();}
if(n<0){ fjisuan();fprint();}
system("pause");
return 0;
}