欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

洛谷 p1010 幂次方

程序员文章站 2023-11-14 18:10:58
#include #include using namespace std; void dg(int n) { int a; if(n==0) return; for(int i=0;i<=15;i++) //求出n以内2最大的a次方 { a=i; if(pow(2... ......

洛谷 p1010 幂次方

#include <cstdio>
#include <cmath>
using namespace std;
void dg(int n)
{
    int a;
    if(n==0) return;
    for(int i=0;i<=15;i++)    //求出n以内2最大的a次方
    {
        a=i;
        if(pow(2,a)>n)
        {
            a--;
            break;
        }
    }
    if(a==0) printf("2(0)");
    if(a==1) printf("2");
    if(a>1)     //当a大于1时进行递归
    {
        printf("2(");
        dg(a);   //使a次方用2的幂次方表示
        printf(")");
    }
    if(n!=pow(2,a))   //使减去最大2的a次方剩下的数用2的幂次方表示
    {
        putchar('+');
        dg(n-pow(2,a));
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    dg(n);
    putchar('\n');
    return 0;
}