信息学奥数一本通(1170:计算2的N次方)
1170:計算2的N次方
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 15778 ??? 通過數: 8179
【題目描述】
任意給定一個正整數N(N<=100),計算2的n次方的值。
【輸入】
輸入一個正整數N。
【輸出】
輸出2的N次方的值。
【輸入樣例】
5【輸出樣例】
32【分析】
? ? ? ? 冪運算計算可以采用分段表示法,也稱作高精度計算的壓位法。 例如,假設用一個數組元素對應于大整數的4位,即將大整數表示為10000進制,也就是說逢10000進1。如,用int型數組a來存放整數6373384,那么只需兩個數組元素即可,a[0]=3384,a[1]=637。俗稱壓位,壓了4位。 本題計算a^n,存儲到整型數組中,如果冪乘超過符號常量PASS:1000000000,壓位10位,則除、余進位,并判斷除余進位是否為最高位,是最高位則位置加1(即整型數組長度加1),最后逆序輸出整型數組。
【參考代碼】
#include <stdio.h>
#define PASS 1000000000 ? ? ?// 符號常量,超過該數,則取余并進位?
#define MAX 200
int main()
{
?? ?int a=2,n;
?? ?long long temp[MAX]={0};
?? ?int pos=1,step=0,j; ? ? ? ? ? // pos 表示分段表示法,表示的數的最高位,當數超過PASS,則 pos+1
?? ?scanf("%d",&n);
?? ?temp[0]=1;
?? ?while(n--)
?? ?{
?? ??? ?for(j=0;j<pos;j++)
? ? ? ? ? ? temp[j]*=a;
?? ??? ?for(j=0;j<pos;j++)
?? ??? ??? ?if(temp[j]>PASS)
?? ??? ??? ?{
?? ??? ??? ??? ?temp[j+1]+=temp[j]/PASS; ? ? // 超過PASS,則數向前進位?
?? ??? ??? ??? ?temp[j]%=PASS;
?? ??? ??? ??? ?if(j==pos-1)
?? ??? ??? ??? ? ?pos++;
?? ??? ??? ?}
?? ?}
?? ?for(j=pos-1;j>=0;j--)
?? ?{
?? ??? ?if(temp[j]==0 && !step)
? ? ? ? ? ? continue;
?? ??? ?if(step==0)
? ? ? ? ? ? printf("%lld",temp[j]);
?? ??? ?else
? ? ? ? ? ? printf("%09lld",temp[j]);
?? ??? ?step=1;
?? ?}
?? ?putchar('\n');
?? ?return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1170
?
總結
以上是生活随笔為你收集整理的信息学奥数一本通(1170:计算2的N次方)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1111:不高兴的津津
- 下一篇: 信息学奥赛一本通 1006:A+B问题