c++2的冪次方


c++2的冪次方

題目描述

任何一個正整數都可以用2的冪次方表示。 

同時約定用括號來表示方次,即a的b次,可以表示為a(b)。 

由此可知,137可以表示為: 

2(7)+2(3)+2(0) 

進一步: 

7=2(2)+2+2(0)(2的1次用2表示) 

3=2+2(0) 

所以137可以表示為: 

2(2(2)+2+2(0))+2(2+2(0))+2(0) 

2

的次冪降次排列。

輸入

正整數n(n<=20000)

輸出

用0,2表示符合約定的n(在表格中不能有空格)。

樣例輸入

137

樣例輸出

2(2(2)+2+2(0))+2(2+2(0))+2(0)

代碼解釋

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
int n;
int a[17];
void work(int x)
{
    if (x == 0)
    {
        printf("0"); 
        return ;
    }
    if (x == 2)
    {
        printf("2");
        return ;
    }
/* 			x等於0或者2的時候就不可以拆分,直接返回原值       */ 
    while (1)
    {
    	int i;
        for (i=16;a[i]>x;i--);//重點    找出小於x的最大2次冪  
        if (a[i] != 2)
        {
            printf("2(");
            work (i);//遞歸    繼續拆分 
            printf(")");
        }
        else
        {
            printf("2"); 
        }
		if (x - a[i]) printf("+"),x = x - a[i];//拆分完大的部分后仍有剩余,繼續拆分小的部分 
		else return ;//拆分完就退出  
    }
}
int main()
{
    a[0] = 1;
    for (int i = 1;i <= 16;i ++) a[i] = a[i - 1] * 2;
/*					預處理出2的1-16次冪										*/
    scanf("%d",&n);
    work (n);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM