题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
第一部分:网络上的代码
main( )
{
long a,b,c,d,e,x;
scanf("%ld",&x);
a=x/10000;/*分解出万位*/
b=x%10000/1000;/*分解出千位*/
c=x%1000/100;/*分解出百位*/
d=x%100/10;/*分解出十位*/
e=x%10;/*分解出个位*/
if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
else if (d!=0) printf("there are 2, %ld %ld\n",e,d);
else if (e!=0) printf(" there are 1,%ld\n",e);
}
第二部分:在下一些分析和代码(*经过别人的指点,改错而成,特此感谢网上那些帮助在下改错的人)
#include <stdio.h>
int main (void)
{
int count=0,n,i;
int a[6];//用于存放输入的数字,a[0]作废,申请六个
printf("输入一个不多于5位的正整数\n");
scanf("%d",&n);
//分别将各位上的数字存入数组中
while(n!=0) /*此处错点:while(n%10!=0)不好,如果输入的是100,while循环直接不执行了*/
{
count++;
a[count]=n%10;//注意此处count=1,会影响下面数组的遍历起点,并且最开始存放的是个位此时的count=1,但是后来会递增。
/*
网友赐教:这句还可以这么写n=(n-a[count]) / 10;——理由:n/=10;虽然可以达到目的,整型做除法商会自动取整,但是还是不建议这样用。 一般写法是 n =( n - (n%10) ) / 10 (先把个位数减了在除10,得到的是整型)。
*/
n/=10; }
printf("它是%d位数\n",count);
printf("它的逆序为:");
//利用数组遍历逆序输出数字
for(i=1;i<=count;i++)//注意此处的i=1
{
printf("%d",a[i]);
}printf("\n");
return 0;
}
ps:在下目前尚处于c语言学习状态,对c语言的认识更是只能算得上新手一名,很多地方考虑不周,漏洞百出现象不可避免,望各位高手多加指点、赐教,非常感谢。