求改错,实在看不懂
给定的下列程序中,函数fun的功能是:
判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。
若是,则输出所有可能的序列。否则输出“不能分解”。
例如:当输入100时,输出:
100=9+10+11+12+13+14+15+16
100=18+19+20+21+22
请改正函数fun中指定部位的错误,使它能得出正确的结果。
#include <stdio.h>
void fun(int n)
{ int j, b, c, m, flag=0;
for (b=1; b <= n/2; b++)
{ /**********found**********/
n = m;
c = b;
while (m != 0 && m >= c)
{ /**********found**********/
m = m - c; c++;
}
/**********found**********/
if( m != 0 )
{ printf("%d=", n);
for (j=b; j < c-1; j++)
printf( "%d+", j );
printf("%d\n", j);
flag=1;
}
}
if(flag == 0)
printf("不能分解\n");
}
void main( )
{ int n;
// printf("请输入一个整数 : ");
scanf("%d", &n);
fun(n);
}
把n赋给m,当m==0而不是m不等于0.不过%d+是什么鬼
代码修改如下:
#include <stdio.h>
void fun(int n)
{
int j, b, c, m, flag=0;
for (b=1; b <= n/2; b++)
{ /**********found**********/
m = n;//error n = m;
c = b;
while (m != 0 && m >= c)
{ /**********found**********/
m = m - c;
c++;
}
/**********found**********/
if( m == 0 ) //error m != 0
{
printf("%d=", n);
for (j=b; j < c-1; j++)
printf( "%d+", j );
printf("%d\n", j);
flag=1;
}
}
if(flag == 0)
printf("不能分解\n");
}
void main( )
{
int n;
// printf("请输入一个整数 : ");
scanf("%d", &n);
fun(n);
}