{
int i=1;
for(i=1; ;i++)
{
n/=10;
if(n==0)
{
break;
}
return i;
}
}
这样以来,求任意数字n的位数就迎刃而解。
接下来看第二问正序输出与第三问逆序输出,由于正序输出属于逆序输出的继承问题
我们先来看逆序输出,再进行正序输出,具体原因将会在下面的篇幅中解释。
上一问中我们已经对“/10”进行了探讨,它的意义为丢弃个位,与其相对应的
还有“%10”,意义与“/10”相反:是取个位。例如:
1234%10=4 继而丢弃4而取123
123%10=3 丢弃3而取12
12%10=2...只需不断重复先取余输出后丢弃的过程即可
void Printreverse(int n)
{
do
{
printf("%d",n%10);
n/=10;
}
while (n!=0);
}
特别的,在这里没有使用惯用的for语句而使用了do while 语句,也可以使用
While语句来进行上述功能,需要注意的是,同样的语句,do while与while 中,
的判断条件都为n!=0,但输出结果却不相同,例如对于上面的程序输入0,输出为0,而将格式改为while后输入0,输出值却变成了1,这个细微的不同是两种语句不同的判断执行顺序导致的。
接下来看这道题中看似最简单的第二问:顺序输出。
有了前面两问的铺垫,我们就可以写出顺序输出的算法:
1234/1000=1,输出1,1234%1000=234
234/100=2,输出2,234%100=34
34/10=3,输出3,34%10=4
4/1=4,输出4,4%1=0,退出循环
为了得到循环开始时n/的1000,我们只需利用第一问求得n的位数p,再对
Pow(10,p-1)的函数进行运算,即可达成目的。(不用<math,h>中的pow函数,
使用for循环也可以完成10^(p-1)的计算)
void Printorder(int n)
{
int p=pow(10,Number(n)-1);
do
{ printf(“%d”,n/p);
p/=10;
n=n%p;
}
while(p!=0);
至此,三个问题都已经得到了解决,这道经典的C语言程序题不仅令我记住了相关算法“/10”和“%10”的运用,也增强了我的代码书写能力,希望今后能发现更多的有益知识与大家共同探讨,共同进步。