C++:任何一个正整数都可以用2的幂次方来表示
例如:7=2²+2+2⁰,137=2⁷+2³+2⁰。
输出格式2(2)+2(1)+2(0),2(7)+2(3)+2(0)
以下有两种方法:
法一:递归方法
void f(int n,int deep)//递归函数,deep为递归深度
{
if(n==1) cout<<"2("<<deep<<")";
else
{
f(n/2,deep+1);
if(n%2) cout<<"+2("<<deep<<")";//n为奇数,输出
}
}
int main()
{
int x;
cin>>x;
f(x,0);
return 0;
}
法二:非递归方法
#include<iostream>
using namespace std;
int main()
{
int temp[20],t;//用数组代替栈,保存幂次方数
int top=-1;//top为栈顶
int x;
cin>>x;
for(int i=0;i<20;i++)
{
temp[i]=-1;
}
t=0;
while(x)//将幂次方的数据存在数组中
{
while(x%2==0)
{
x=x/2;
t++;
}
if(x%2)
{
top++;
temp[top]=t;
x=x-1;
}
}
for(int i=0;temp[i]>-1;i++)//输出
{
if(i) cout<<"+2("<<temp[i]<<")";
else cout<<"2("<<temp[i]<<")";
}
return 0;
}