全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 处理器/DSP >

如何计算编程计算2的1024次方呢?

时间:2023-08-14 11:06

人气:

作者:admin

标签: 模拟  二进制  C语言  处理器 

导读:迅雷有这么一道笔试题,编程计算2的1024次方。...

迅雷有这么一道笔试题,编程计算2的1024次方。

所谓2的1024次方,就是有1024个2相乘,于是有些同学顺手就能写出代码:

int main()
{
    int reslut = 1;
for(inti=0;i< 1024; i++)
    {
        result *= 2;
    }
    printf("%d
", result);
    return 0;
}
如果你也这样写代码,那简历上顶多能写了解C语言,离掌握和精通还差很远。

C语言中的int类型一般占4字节,4个字节就是32位二进制,即使是无符号数,能表示的最大数字也就是2的32次方减一,离2的1024次方还差很远。

所以单纯的用整数来保存结果肯定不行。

一种办法是当作字符串来处理,模拟乘2进位的方法。

来一个数组,数组尽量大一些,初始化成1,乘以2的结果分别是2 4 8。

a8d6669c-39b8-11ee-9e74-dac502259ad0.png  

再乘以2的时候,结果是6并且向后进一位。

a9032380-39b8-11ee-9e74-dac502259ad0.png  

再比如64,4乘以2等于8,不用进位,6乘以2等于2,向后进一位。

a935685e-39b8-11ee-9e74-dac502259ad0.png  

最终得到的字符串来个逆序就行。

这种办法不仅能计算2的1024次方,再大一些,问题也不大。

代码直接贴上,需要的话可以暂停下看看。
#include
#include 


void reverse(char *r) 
{
    int length = strlen(r);
    int i;
    char ch; 
    for (i = 0; i < length / 2; i++)
    {   
        ch = r[i];
        r[i] = r[length - 1 - i]; 
        r[length - 1 - i] = ch; 
    }   
}


void NPowerOfTwo(int n, char *res)
{
    int i, length, j, num, carry;
    for (i = 0; i < n; i++)
    {
        carry = 0;
        for (j = 0; j < strlen(res); j++)
        {
            num = res[j] - '0';
            num = (num << 1) + carry;
            carry = num / 10;
            res[j] = num % 10 + '0';
        }   
        if (carry > 0)
            res[j] = carry + '0';
    }       


    reverse(res);
}   


int main( )
{
    int n;
charresult[2048]={'1'};


NPowerOfTwo(1024,result);


    printf("%s
", result);


    return 0;
}
在牛客的排行榜上,速度最快,占用空间最小的并不是这种解法。

int类型虽然不好表示这么大的数,但是C语言中还有一种long double类型,具体的长度不同的编译器可能略有不同,10字节、12字节、16字节都有。

我用的Ubuntu环境,long double类型确实能解决2的1024次方。
int main()
{
long double reslut=1.0;
    for (int i = 0; i < 1024; i++)
    {
        result *= 2.0;
    }
    printf("%.0Lf
", result);
    return 0;
}





审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信