各位高手们,我这有道题,帮帮忙啊!!!
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)
----------------解决方案--------------------------------------------------------
用递归试试
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
#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编辑过]
----------------解决方案--------------------------------------------------------