//我有两个问题:Q1不相邻的素数不能相加,咋办?eg 13=1+4+8; //Q2:最后一个数字后还是有逗号,不符合题目,咋办?# include<math.h># include<stdio.h>int main(){ int i,num,k,pow2[100],sum=0,start,j=0; printf("input a num:\n"); scanf("%d",&num); start=num; for(i=0;num!=1&&num!=2&&num!=0;i++) { k=(int)sqrt(num);//这个程序只能使得相邻素数相加eg12=4+8 pow2[i]=pow(2,k);//Q1不相邻的素数不能相加,咋办?eg 13=1+4+8; num-=pow2[i];//这是开根号求出最高幂次,然后减去,再算 sum+=pow2[i]; } if(num==1) sum+=1; if(num==2) sum+=2;//这是看最后是1或者2 或者0 if(num==0&&start==sum) for(j=0;j<i;j++) printf("%d,",pow2[j]); if(num==1&&start==sum)//这是验证素数的和是否等于原来的数 { for(j=0;j<i;j++) printf("%d,",pow2[j]); putchar(49); }//这是按要求打印 Q2:最后一个数字后还是有逗号,咋办? if(num==2&&start==sum) { for(j=0;j<i;j++) printf("%d,",pow2[j]); putchar(50); } printf("\n");}
你的程序实在太复杂了,新写了一个
望采纳
追问,((n==0)?NULL:','))是什么意思,求解释!
你的算法是怎样的一个思路?请用文字或图片描述
追答n等于0的时候,就是输出最后一项的时候。
这就话就是如果不是输出最后一项,就输出逗号,否则不输出。
这个就是解决输出的最后一个数字后面还有逗号的。
那个for循环是找到一个2的i次幂x,这个x大于被分解的数(即输入的n),然后x再除以2,就得到了输出的第一个数,即小于n的最大2的次方幂。
比如输入14,for会循环到i=4,此时x=16,然后x/=2,x=8。这就是第一项。
题目说了一个数分解为若干2的次幂相加。现在已经求出其中一个2的次幂了,所以要减去他。这就是n-=x。
之后就是while的第二次循环了。还用14的那个例子,这次就是求小于6的最大2的次幂(至于为什么是6,原因是n-=x)。