2的n次方
任意给定一个正整数N(N<=100),计算2的n次方的值。
Input
输入一个正整数N。
Output
输出2的N次方的值。
Sample Input
5
Sample Output
32
Hint
高精度计算
是不是看到这个标题,就蠢蠢欲动,觉得石头落下地了呢?但是仔细一看,啊?2^100????????
就是unsigned long long 也不够呀,那没办法了,只有用其他的技巧了,我和同学苦思冥想,只想到了用数组去存储每一位数然后输出。
那到底怎么操作呢?
注意看最后一位,如果是1,1*2=2;如果是2,2*2=4;如果是4,4*2=8;那如果是8呢(已经执行了前面的步骤,2^3)?,8*2=16,超过了10就往左敬一个,有点算盘的感觉,三下五除二,四去六敬一。
我们可以用这个原理。上代码。
#include<stdio.h>
int main()
{
int a[50]={0};//估计50个位数保存应该够用了
a[49]=1;/*用数组存储,从右往左依次敬位*/
int n;
int i;
int b=0;//这个b充当敬位的功能,就是相当于笔算的时候满十敬一
scanf("%d",&n);
//n次循环。就是乘了n次
while(n--){
int i=49;
while(i>0){
int flag=2 * a[i]+b;
a[i]=flag % 10;
b=flag / 10;
i--;
}
}
/*因为存储了数组是前面都是零,然后后面是有效数字,
控制不让前面的无效数字输出 */
for(i=0;i<50;i++)
if(a[i]!=0) break;
for(;i<50;i++)
printf("%d",a[i]);
return 0;
}
嗯嗯,开始觉得很简单,后来又觉得不简单,然后终于找到了规律。从小学竖式里面寻找规律,*2其实就是两个一样的数相加。
满十敬一。
OK,AC。数字真的是很奇妙呀。
相关阅读
此计算机上缺少vc2005_sp1_with_atl_fix_redist
安装Loadrunner11的时候报错解决办法就是,在安装文件的目录下,找到文件,"lrunner\Chs\prerequisites\vc2005_sp1_redist"目录下,点
科技圈热点时隔5年,雷军再次公开表态:要求小米认真向华为学习红米新旗舰命名K20,一石激起千层浪。时隔5年,雷军再次公开表态,要求小米
SqlServer之like、charindex、patindex区别及性能分析
第一篇文章:SqlServer之like、charindex、patindex1、环境介绍测试环境 SQL2005测试数据 200W条2、环境准备2.1建表CREATE TABLE [
Java开发者如何正确的使用String,StringBuffer,StringBu
通过前面的文章,我们知道String类最大的特点是不可变性,这意味着对String类的任何修改都会新生成一个字符串,比如你执行了String类的
JDBC的PreparedStatement启动事务使用批处理executeBa
转自:https://blog.csdn.net/xiong9999/article/details/53258698 JDBC使用MySQL处理大数据的时候,自然而然的想到要使用批处理, 普