悬赏10分,C语言的高手吗?第十一届全国青少年信息学奥赛程序题第四题,有谁知道怎么做吗?
发布网友
发布时间:2023-01-17 08:55
我来回答
共2个回答
热心网友
时间:2023-11-18 12:55
digit(n/10,m/10);
printf("%2ld",n%10); 容易发生错误.
其实前面输出的6 2 5 4 3 7 9都是在digit(n/10,m/10); 的内层循环中输出的。后面的9 7 3 4 5 2 6才是跳出内层循环digit(n/10,m/10); 在语句printf("%2ld",n%10);中输出的,每次的内层循环digit(n/10,m/10); 都有一个语句printf(n/10,m/10);
所以结果就是这样的了。这个问题其实不是很隐蔽
不过要是初学或不细心,哈哈,可就麻烦了!
热心网友
时间:2023-11-18 12:55
慢慢跟踪就是了
main()
{long x,x2;
printf("Input a number:\n");
scanf("%ld",&x);
x2=1;
while(x2<x) //进入循环 一直到x2=10000000
x2*=10;
x2/=10; //然后x2=1000000
digit(x,x2);
printf("\n");
}
下面就进入递归了
取余得到6254379
到这里 要注意
if(m>1)
digit(n/10,m/10);
printf("%2ld",n%10);
其实 语句一直在递归里转圈 在递归调用后的print语句一值没有用 这就要从里到外一次 使用递归后的print了
最内层 n%10 =9
倒数第二层为7
然后回来
就是这样 呵呵
区别很大
digit(n/10,m/10)只是给函数传参数n/10与m/10
digit(n=n/10,m=m/10)是 先吧n变成n/10,这里n的值变了 上面没有变