帮忙看个程序

来源:百度知道 编辑:UC知道 时间:2024/05/15 19:44:34
#include <stdio.h>
int main(int argc, char *argv[])
{
void thou(long n);
thou(7654321);
return 0;
}

void thou(long n)
{
static int i=0; /*计算n的位数
static int j=0; /*计算当前输出到第几位*/
if(n==0)
return;
else
{
i++;
thou(n/10);/*递归*/
j++;
if((i-j+1)%3==0&&j!=1)
printf(",");
printf("%d",n%10);
}
}
该程序是将7654321,每3位打个逗号.想问问大家其中if((i-j+1)%3==0&&j!=1) 怎么理解啊?请大家写详细了!

根据递归,我画流程步骤,用非标准的C来描述一下:
1) 调用thou(7654321);
i=j=0; #注意这是static初始化哦
i=1;
thou(765432);
.............................未归!!
2) i=2;thou(76543);
.......................未归
3) i=3;thou(7654);
.................未归
4) i=4;thou(765);
...........未归
5)i=5;thou(76);
......未归
6)i=6;thou(7);
...未归
7)i=7;thou(0);
返回!!
6)i=6;j=1;打印出"7"
5)i=5;j=2;打印出"6"
4)i=4;j=3;打印出"5"
3)i=3;j=4;此时满足(i-j+1)%3==0&&j!=1打印","和"4"
2)i=2;j=5;打印出"3"
1)i=1;j=6;打印出"2"
起始点,i=1;j=7;满足条件,打印","和"1"

开始输出时,
i是数字的总位数,本题中是7。
j是当前打印的第几位。
i-j+1是还剩多少位。
(i-j+1)%3是看看剩下的位数是否是3的倍数,如果是,并且当前打印的不是第一位(j!=1),就打印一个“,”。
其他数字是按位输出的,不必解释了吧。

这不是我上次写的吗???你问我不就好了吗....

1楼的分析得很好,你看看。
不过有个问题,其实
6)i=6;j=1;打印出"7"
5)i=5;j=2;打印出"6"
4)i=4;j=3;打印出"5&