迅雷有这么一道笔试题,编程计算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。
再乘以2的时候,结果是6并且向后进一位。
再比如64,4乘以2等于8,不用进位,6乘以2等于2,向后进一位。
最终得到的字符串来个逆序就行。
这种办法不仅能计算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; }
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
处理器
+关注
关注
68文章
19265浏览量
229667 -
二进制
+关注
关注
2文章
795浏览量
41643 -
C语言
+关注
关注
180文章
7604浏览量
136710 -
字符串
+关注
关注
1文章
578浏览量
20508 -
模拟器
+关注
关注
2文章
875浏览量
43209
原文标题:计算2的1024次方
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
二次方程式编程求助
最近在做项目中需用到二次方程式寻优,发现LabView中没有附上相应的范例(函数->数学->最优化->二次方程式编程),只有连线版上的几个引脚说明,如何运用该模块进行编程实在是困扰
发表于 01-27 21:22
在labview中怎样将三次方开出,正负都有
为什么,为什么,在labview中开三次方后,信号只有正的,负的怎么找不到?要怎么做才可以把信号的三次方完整的开出。。。。此时甚急,快来相助,不胜感激!!!!!
发表于 05-12 13:40
数组更新现在只能计算第一次的,该如何计算之后的呢?
请教各位高手了,如图所示,想计算出每一秒中0.135到0.165s之间30ms内的最值,但貌似只能计算第一次的,该如何计算之后的呢
发表于 06-10 11:22
请教DSP关于8次函数的计算问题
,floa肯定t够用。 目前采用了两种方式实现,第一种是调用pow(a,b)函数,完成8次方到0次方的累加,是双精度的肯定够用,最后赋值保存成float,计算的结果正常。 第二种方式是直接根据公式直接
发表于 09-11 10:42
请问乘积超过2的32次方怎么处理?
我的程序是这样的:accel_lim = ((long)step*decel) / (accel+decel);由于step和decel比较大,所以他们的乘积可能超过2的32次方-1,但是除以(accel+decel)后肯定是小于2
发表于 02-27 08:38
如何用C程序解一元三次方程根
摘要:本文介绍了高等数学的近似计算方法中切线法和二分法的思想,再利用其思想结合C程序设计语言,编写出了求一元三次方程根的程序,该程序稍加修改,即可成为求更高次方
发表于 06-21 09:19
•61次下载
魔方超级计算机应用环境
魔方超级计算机是基于集群概念设计的大型计算机系统,其整体计算能力理论峰值为200T flops(1Tflops即为每秒10的12次方浮点计算
发表于 04-07 21:07
•83次下载
九次方牵手湖北广电 建大数据应用示范基地
九次方大数据与湖北广电合资成立湖北大数据应用服务及数据资产运营公司玖云大数据公司。公司将通过大数据应用服务平台建设和数据资产运营等途径,助力湖北建成国内一流的大数据应用示范基地。 正在
发表于 12-22 10:01
•1250次阅读
九次方大数据联手徐州国投 共建大数据公司
2017年1月10日,九次方大数据与徐州市政府合资成立大数据公司,双方合作打造政府大数据资产运营平台,推动大数据应用落地、助力当地打造可持续发展大数据产业生态圈。
发表于 01-12 11:36
•1563次阅读
改进的四次方功率谱的调制信号载波频率估计
要的参数之一,如果不能精确估计载波频率,干扰信号就无法在频域上对准目标信号。针对QPSK信号和16QAM信号,主要有基于信号四次方功率谱和基于信号循环谱的载频估计算法。基于四次方功率谱的载频估
发表于 11-09 15:25
•26次下载
设计一个一元二次方程方程的类
设计一个一元二次方程的类,其中包括能够反映一元二次方程的属性与操作行为,然后再设计一个测试类,检测类的使用情况。
2 方法
使用package语句将方程的属性即计算
评论