vijos 1597 2的幂次方
题目有点意思,处理格式是耗费了一点时间。
查表最方便了。
代码如下:
#include<stdio.h>
int a[25];//建立2次方幂表,数据量不大,查表降低时间
void recursion(int t)
{
int i=0;
while(a[i]<=t)
i++;
i--;//从上面while到这是为了找到除自己外最大的2次方幂
if(t>5)
{
printf("2(");
recursion(i);
printf(")");
if(t-a[i]>0)
{
printf("+");
recursion(t-a[i]);
}
}
else
{
if(t/2==2)
{
if(t%2==1)
printf("2(2)+2(0)");
else
printf("2(2)");
}
if(t/2==1)
{
if(t%2==1)
printf("2+2(0)");
else
printf("2");
}
if(t/2==0)
if(t%2==1)
printf("2(0)");
}
}
int main()
{
int N;
int i;
a[0]=1;
scanf("%d",&N);
for(i=1;i<=20;i++)
a[i]=a[i-1]*2;
recursion(N);
return 0;
}
当然还可以进一步节省时间,如把100内质数的分解写出来,我只写了1~5的(万幸数据不是太强)