问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

2的x次幂的值

发布网友 发布时间:2024-10-21 07:35

我来回答

3个回答

热心网友 时间:2024-10-27 23:13


 
 
不错的一道题!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* NOSD for printing (see NOSD below) */
#define NOSD_PRINT 32

/* number of significant digit in our HPFP (high-precision floating-point): NOSD + ~20% */
#define NOSD ( NOSD_PRINT + NOSD_PRINT / 5 )

/* the HPFP, initialized to 1 */
char significand[ NOSD ] = { 1 };   /* using "char" to make use of memmove( ) */
int  exponent;

/* multiplies our HPFP by the least significant digit of d */
void multiplyByOneDigit( unsigned d ) {
    /* do the LSD (least significant digit) first,
       then start the loop from the digit on its left */
    char *digit = significand + NOSD - 1;
    d %= 10;
    for ( *digit *= d; significand <= --digit; ) {
        *digit *= d;
        if ( *( digit + 1 ) > 9 ) { /* carry from lower digit */
            *digit += *( digit + 1 ) / 10;
            *( digit + 1 ) %= 10;
        }
    }
    if ( *significand > 9 ) { /* MSD overflows: drop LSD */
        memmove( significand + 1, significand, NOSD - 1 );
        *significand = *( significand + 1 ) / 10;
        *( significand + 1 ) %= 10;
        ++exponent;
    }
}

void divideByOneDigit( unsigned d ) {
    char *digit = significand;
    d %= 10;
    for ( ; digit <= significand + NOSD - 1; digit++ ) {
        if ( digit != significand + NOSD - 1 )
            *( digit + 1 ) += *digit % d * 10;
        *digit /= d;
    }
    if ( *significand == 0 ) {
        memmove( significand, significand + 1, NOSD - 1 );
        --exponent;
    }
}

/* returns the string representation of our HPFP */
char *toString( ) {
    char *s = calloc( NOSD_PRINT + 30, 1 );  /* enough room even if int is 64-bit */
    int digit_index = 0;
    for ( ; digit_index < NOSD_PRINT; digit_index++ )
        s[ digit_index ] = significand[ digit_index ] + '0';

    /* potential round up of last digit, hence potential carry propagation */
    if ( significand[ digit_index ] > 4 )
        if ( ++s[ digit_index - 1 ] > '9' ) {
            int i = digit_index - 1;
            while ( --i && s[ i + 1 ] > '9' ) {
                s[ i + 1 ] -= 10;
                s[ i ]++;
            }
        }

    /* normalize: discard trailing zeroes */
    while ( s[ --digit_index ] == '0' && digit_index - 1 )
        s[ digit_index ] = 0;

    /* convert to scientific format */
    memmove( s + 2, s + 1, strlen( s ) - 1 );
    s[ 1 ] = '.';
    sprintf( s + digit_index + 2, "e%+04d", exponent );

    return s;
}

void main( ) {
    int exp, isNegative;
    char input[ 99 ];
    puts( "Enter the exponent (must be an integer between -1000 and 1000):" );
    for ( ; ; ) {
        gets( input );
        if ( strchr( input, '.' ) != NULL ) {
            puts( "Decimal point isn't allowed in integer. Try again:" );
            continue;
        }
        exp = atoi( input );
        if ( strlen( input ) > 5 || exp < -1000 || 1000 < exp ) {
            puts( "The integer's out of range. Try again:" );
            continue;
        }
        break;
    }
    isNegative = exp < 0 ? exp *= -1 : 0;
    while ( exp-- )
        if ( isNegative )
            divideByOneDigit( 2 );
        else
            multiplyByOneDigit( 2 );

    fprintf( stdout, "Result:\n\t%s\n", toString( ) );
}
 
 

热心网友 时间:2024-10-27 23:16

#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;
}

热心网友 时间:2024-10-27 23:11

http://www.qaohoo.com
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑重装以后的漏洞是否需要修补? 你的电脑修复系统不用修复了吗电脑提示漏洞修复到底要不要修复 电脑系统重装漏调修复重要吗刚重装系统那些漏洞要修复吗win10_百度... 组装电脑系统漏洞可以修复吗电脑漏洞有必要修复吗 电脑新系统修复漏洞电脑提示漏洞修复到底要不要修复 韩国手机卡陷阱多多?一招教你完美避开所有坑! 东莞长安有哪几个区镇 东莞长安镇有哪几个村 东莞长安有哪些镇 东莞厦岗哪里有手工外发 怎样防止蚂蚁进入家中? 数学里 1.12 E 30是什么意思 一千5左右买什么性价比高的手机? ...了华为p8青春版和小米4,但我不知道那款手机好一点,希 ...喝伤了怎么办,现在一杯都想吐,不知道是胃不行了,还是喉咙问题_百度... 喉咙被小骨头卡住了,后来吞下去了,但是感觉伤了里面不舒服,怎么办? 中兴cpe每月什么时间给流量 风湿性心脏病患者的护理措施 慢性风湿性心脏病常见的并发症包括哪些 风湿性心瓣膜病最常见的心律失常 卖点行销特点 顾问式行销:中国式保险行销策略和案例作者简介 顾问式行销:中国式保险行销策略和案例图书信息 毕业留言唯美句子,伤感的句子,伤感语录:篱笆外的猫不再受宠有些事我懂... p10室外单色LED显示屏串口出错怎么办啊? 6312轴承大概多少钱? 想改变浴室柜下水管的位置,请问怎么改 ...武侠)耽美小说,要虐的,程度如何无所谓,结局要HE,就算BE也别太悲了... 淘宝信用支付是什么意思? 淘宝里的信用支付是什么意思? 房产证可以到银行贷款吗 香蕉牛奶可以和哈密瓜一起吃? ...时发生1015错误,然后手机开机就显示与itunes连接界面 无法正常开机... 什么是花班司机 什么是花班司机 ...天我俩说的话不多,她上下班我天天接送她,她说她不需要司机... ...和数据线给剪了。还给劳资脸色看。放假肯定让他挨打... 由于塘沽轻轨9号线炸毁了,从塘沽到和平区营口道怎么去?做高铁到天津然... 塘沽地铁站距离塘沽营口道611号多远? 塘沽火车站怎么到轻轨一号线 天津塘沽地铁站到船上小镇坐几号线 请问谁能告诉我最短时间学习五笔的方法? 练会五笔要多长时间 平塘有什么好玩的地方?哪些景点必去,贵州平塘旅游景点 张娜拉的新剧《童颜美女》不好看吗?为什么PPS和优酷的评分那么低_百度... 谁知道童颜美女张娜拉唱的那首歌的中文歌词是什么? 金融消费者权益保护实施办法的实施时间是哪一年 云南绿业元果蔬有限责任公司怎么样? 厦门季阳果蔬有限公司怎么样? 济宁嘉汇果蔬有限公司怎么样?