C语言课后习题,求解答

题目是判断一个不超过5位的正整数的位数,并且把各个位上的数输出。这是C程序教材上的题,虽然有答案,但是还是想知道自己的程序哪里有问题#include<stdio.h>#i... 题目是判断一个不超过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=0)
printf("位数为%d\n",p);
if(a>99999)
printf("error\n");
else
for(i=1;i<=5;i++)
{if(a/(pow(10,i))<1)
break;}
printf("位数为%d\n",i);
b=a;
for(t=i-1;t>=0;t--)
{b=b/(pow(10,t));
for(j=1;j<=9;j++)
{b=b-1;
if(b<1&&b>0)
printf("第%d位数为%d\n",i,j);
else
if(b<0)
{b=b+1;printf("第%d位数为%d\n",i,d);}
}
b=b*(pow(10,t));
}
return 0;
}
求位数时,程序里是想当数a除了10的i次方才小余1,那么它就是有i位的数
求每一位置上的数时,是从高位向低位求的,先从最高位第i位开始,将第i位除10的i-1次方变为个位,然后将其个位循环减1直到它小于1,然后输出循环减1的次数就是它第i位上的数
为0的特殊情况也考虑了
展开
 我来答
匿名用户
2017-08-14
展开全部
首先 有 个问题if(a=0)printf("位数为%d\n",p);在这里。你就把a赋值成0 了、判断应该用==
其次。if(b<1&&b>0)。。0<b<1还是个整数。。。应该不存在吧。重点不是这个。b=b/(pow(10,t));。就已经把所有 的末尾的数都去掉了。
最后,你的b是定义的float。。怎么可能用%d输出、
我帮你该好了代码。
#include <stdio.h>
#include <math.h>
int main()
{
int b;
int a,i,j,t,d,p;
scanf("%d",&a);
d=0;
p=1;
if(a == 0)
printf("位数为%d\n",p);
if(a>99999)printf("error\n");
else
for(i=1;i<=5;i++)
{
if(a/(pow(10,i))<1)
break;
}
printf("位数为%d\n",i);
for(t=i-1;t>=0;t--)
{
b = a / (pow(10,t));
b = b % 10;
printf("第%d位数为%d\n",t+1,b);
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式