当前位置: 代码迷 >> C语言 >> [求助]求教一道编程题???
  详细解决方案

[求助]求教一道编程题???

热度:177   发布时间:2006-08-10 12:14:19.0
[求助]求教一道编程题???

各位高手们,我这有道题,帮帮忙啊!!!
1=2(0)
2=2(1)
3=2(1)+2(0)
4=22=2(2(1))
5=22+1=2(2(1))+2(0)
6=22+21=2(2(1))+2(1)
8=23=2(2(1)+2(0))
64=26=2(2(2(1))+2(1))
依次这样,就是将一个数写成以2为底的幂的形式,然后再对幂施以同样的处理:
(1)这个数只能由0,1,2组成;
(2)单独一个1写成2(0)的形式,指数上的1则不用写成这样的形式;
(3)指数以括号的形式放在底数后面;
程序要求:
示例:
输入一个数字:97
输出:97=2(2(2(1))+2(1))+2(2(2(1))+2(0))+2(0)

搜索更多相关的解决方案: SUP  形式  指数  

----------------解决方案--------------------------------------------------------

用递归试试


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------

#include <stdio.h>

int k,s,t; /*这几个全局变量为了方便,哈,省的传参数了,k是用户输入的数,s为1的时候表示不是(的起始处,用来根据情况添+号的,t是判断是否要显示2(1)滴。*/

int show(int m) /*显示2(1),2(0)什么的 */
{
if(m!=k&&s)
printf("+");
switch(m)
{
case 1:printf("2(0)");m-=1;break;
case 2:printf("2(1)");m-=2;break;
}
s=1;
return(m);
}
int getanswer(int x)
{
int t1,t2;
if (x>0&&x<3)
{
x=show(x);
return(0);
}
if (x<=0)
return(0);
t2=1;
t1=0;
t=1;
if(x!=k&&s)
printf("+");
while((t2*2)<=x)
{
s=0;
if (t)
printf("2(1)(");
t2*=2;
t1++;
t=0;
}
getanswer(t1);
printf(")");
getanswer(x-t2);
}
main()
{
clrscr();
printf("Please input a number(>0):");
scanf("%d",&k);
printf("%d=",k);
getanswer(k);
getch();
}



[此贴子已经被作者于2006-8-11 8:38:02编辑过]


----------------解决方案--------------------------------------------------------

水平有限,就能用递归了,用循环实现这个没去想...也许要写个几百行哈
而且平时就自己做,没+过注释....这个都要+在哪里?

[此贴子已经被作者于2006-8-11 8:38:43编辑过]


----------------解决方案--------------------------------------------------------

拜过!!!


----------------解决方案--------------------------------------------------------
编译时
clrscr()和getch()
好像有点问题??
----------------解决方案--------------------------------------------------------

换成getchar()试试


----------------解决方案--------------------------------------------------------
#include "Stdio.h"
#include "Conio.h"
#include "math.h"
int log2(int num);
void func(int num);
int main(void)
{
int num;
scanf("%d",&num);
func(num);
getch();
return 0;
}
void func(int num)
{
int trans;
num==2?(printf("2(1)")):(num==1?(printf("2(0)")):(printf("2("),func(log2(num)),printf(")"),trans=num-(int)pow(2,log2(num)),trans>0?(printf("+"),func(trans)):(getch())));
}
int log2(int num)
{
return (int)(log(num)/log(2));
}

明天再看看能不能写个不递归的,我睡觉先。
----------------解决方案--------------------------------------------------------

#include <stdio.h>

main()
{
char a[16];
int num,i=0;

scanf("%d",&num);

do{
a[i++]=num%2;
num=num/2;
}while(num>0)

printf("%d=",num);

if(i>2)
{
printf("2(");
for(--i;i>0;i--)
printf("2(%d)+",a[i]>0?0:1);
printf("\b)");
}
else if(i>1)
printf("2(%d)",a[--i]);

if(a[0])
printf("+2(0)");

}
没调试...有错误的话请高手指正.

[此贴子已经被作者于2006-8-12 1:09:54编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案