C语言初学者的编程问题,希望能在论坛得到解答
题目是判断一个不超过5位的正整数的位数,并且把各个位上的数输出。这是C程序教材上的题,虽然有答案,但是还是想知道自己的程序哪里有问题,恳请路过的花两分钟解答下,不胜感激#include <stdio.h>
#include <math.h>
int main()
{
double b;
int a,i,j,t,d,p;
scanf("%d",&a);
d=0;
p=1;
if(a>99999)
printf("error\n"); //判断是否小于5位数
else
for(i=1;i<=5;i++)
{if(a/(pow(10,i))<1)
break;} //循环除10知道小于1,循环次数i为位数
printf("位数为%d\n",i);
b=a; //由于后面要将a除10为小数,所以换个变量类型
for(t=i-1;t>=0;t--) //t为目前数b的最高位
{b=b/(pow(10,t)); //除10的次幂将其最高位变为个位
for(j=1;j<=9;j++) //将其不断减1,j为减1的次数,直到b小于1,此时j即为其最高位上的数
{b=b-1;
if(b<1&&b>0) //由于存在0的情况所以分两种情况讨论,此处为最高位不为0的情况
printf("第%d位数为%d\n",i,j);
else
if(b<0) //此处为最高位为0的情况
{b=b+1;printf("第%d位数为%d\n",i,d);} //由于此时数为负数,要将其个位消除,所以加1
}
b=b*(pow(10,t)); //经过上述循环最高位已减完,将其由小数还原为出去最高位的初始数,然后进行下一个大循环求下一位数,即为此时b的最高位
}
return 0;
}
[此贴子已经被作者于2017-8-14 14:44编辑过]