求解析过程 从那里开始入手

结果是-125=-555
若输入的值是-125。
#include <stdio.h>
#include <math.h>

fun (int n)

int k,r ;

for(k=2; k<=sqrt(n);k++)

r=n %k;

while(!r) {

printf(“%d",k); n=n/k;

if (n>1) printf(“*");

r=n %k;

if (n!=1) printf(%dn",n);

int main ( )

int n;
scanf(%d",&n);

printf(“%d=”,n);

if (n<0) printf(“-”);

n= fabs(n); fun(n);
return 0;

分析一下,n=-125,那么调用函数为fun(125)
for循环范围为k从2到11,因为sqrt(125)为11-12之间
while循环成立条件要求r为0,而r的值为125求余k,所以k从2到11之间只有k=5满足条件,进入循环
此时printf("%d",k)会输出5
n=n/k使得n=25
由于n>1,所以输出
r=n%k=25%5=0,可以继续循环,printf("%d",k)再次输出一个5
n=n/k=25/5=5
由于n>1,所以再次输出

r=n%k=0,继续循环,printf("%d",k)再次输出一个5,
n=n/k=5/5=1
n>1不成立,不输出*号
r=n%k=1%5=1,循环结束
由于n值为1,所以n!=1不成立,最后的print不输出
所以最终输出为:

-125=-5*5*5