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

洛谷 P1010 [NOIP1998 普及组] 幂次方(递归套娃)

程序员文章站 2022-05-08 23:49:20
...

菜鸟生成记(71)

对代码失去兴趣的第N天,写个水题提升一下兴致;

模拟,递归套娃,if套if

C语言 log2n表示:log(n)/log(2)

#include <iostream>
#include<cstdio>
#include<cmath>
using namespace std;
void fun(int y)
{
	int x=y,flag=0;
	while(x>=1)
	{
		y=log(x)/log(2);//2^y;
		if(y>1)
		{
			if(flag==0)
			printf("2(");
			else
			printf("+2(");
			flag=1;
			fun(y);
			printf(")");	
		}
		else if(y==1)
		{
			if(flag==0)
			printf("2");
			else
			printf("+2");
			flag=1;
		}
		else if(y==0)
		{
			if(flag==0)
			printf("2(0)");
			else
			printf("+2(0)");
			flag=1;
		}
		x-=(int)pow(2,y);
	}
	return;
}
int main()
{//16385
	int x=16385;
	int y;
	cin>>x;
	int flag=0;
	while(x>=1)
	{
		if(flag==1)
		printf("+");
		y=log(x)/log(2);//2^y;
		if(y>1)
		{
			printf("2(");
			fun(y);
			printf(")");
			flag=1;
		}
		else if(y==1)
		{
			printf("2");
		}
		else if(y==0)
		{
			printf("2(0)");
		}
		x-=(int)pow(2,y);
	}
	return 0;
}
相关标签: 模拟