@C语言大神:我的代码不能实现 不相邻数字求和,格式也不对,求修改!(谢绝新代码)

//我有两个问题: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");}

#include <stdio.h> 
void main(){
int n,x;
printf("输入一个整数:\n");
scanf("%d",&n);
while(n>0){
x=1;
for(int i=0;x<=n;i++){
x*=2;
}
x/=2;
n-=x;
printf("%d%c",x,((n==0)?NULL:','));
}
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)。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答