帮忙看个程序

[复制链接]
查看11 | 回复2 | 2008-1-16 15:24:50 | 显示全部楼层 |阅读模式
开始输出时,i是数字的总位数,本题中是7。j是当前打印的第几位。i-j+1是还剩多少位。(i-j+1)%3是看看剩下的位数是否是3的倍数,如果是,并且当前打印的不是第一位(j!=1),就打印一个“,”。其他数字是按位输出的,不必解释了吧。
回复

使用道具 举报

千问 | 2008-1-16 15:24:50 | 显示全部楼层
这不是我上次写的吗???你问我不就好了吗....1楼的分析得很好,你看看。不过有个问题,其实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来的。2楼说的没错。3楼 “可以去掉&&j!=1,结果仍然正常”不是这样的,如果去掉&&j!=1,有些时候会在首位输出","啊。仔细看就知道,i的值是n的总长度。比如7654321,i就是7j则每输出1个数加1,所以是当前输出的位数。i-j+1其实就是还剩多少位显然,如果这个数是3的倍数,那就要输出","这里还有个更简单的,你看看:void thou(long n){if(n<1000) printf("%d",n);else{ thou(n/1000); printf(",%d",n%1000);} }
回复

使用道具 举报

千问 | 2008-1-16 15:24:50 | 显示全部楼层
正如你所说的i表示n的位数,这里的位数=7,而由递归的思路,我们可以看到,第一个被执行的是最高位“7”,这个时候,i=7,j=1,对于((i-j+1)%3==0&&j!=1)这条语句可以看出(7-1+1)%3==0不成立,则程序跳过printf(","); 执行printf("%d",7%10);也即输出“7”,完成这个循环后,程序跳出第一个递归,执行n=6时,这个时候,i=7,j=2,(7-2+1)%3==0成立,且j!=1,所以,程序执行printf(",");也即输出“,”,然后执行printf("%d",6%10);也即输出“6”,逐次递归返回到n=1时,程序完成,事实上,对于if((i-j+1)%3==0&&j!=1)这个判断,可以去掉&&j!=1,结果仍然正常
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行