C语言问题,题目:输入一个5位数以内的正整数,要求输出这是个几位数?每一位分别是多少?

题目:输入一个5位数以内的正整数,要求输出这是个几位数?每一位分别是多少?
main()
{
long int a;
int b,c,d,e,f;
scanf("%ld",&a);
while(a>=1&&a<=99999)
{
if(a/10000>=1&&a/10000<10)
{
printf("this is 5 steps\n");
b=(int)(a/10000);
c=(int)((a-b*10000)/1000);
d=(int)((a-b*10000-c*1000)/100);
e=(int)((a-b*10000-c*1000-d*100)/10);
f=a-b*10000-c*1000-d*100-e*10;
printf("b=%d c=%d d=%d e=%d f=%d",b,c,d,e,f);break; }
if(a/1000>=1&&a/1000<10)
{
printf("this is 4 steps\n");
b=(int)(a/1000);
c=(int)((a-b*1000)/100);
d=(int)((a-b*1000-c*100)/10);
e=a-b*1000-c*100-d*10;
printf("b=%d c=%d d=%d e=%d",b,c,d,e); break; }
if(a/100>=1&&a/100<10)
{ printf("this is 3 steps\n");
b=(int)(a/100);
c=(int)((a-b*100)/10);
d= a-b*100-c*10;
printf("b=%d c=%d d=%d",b,c,d); break; }
if(a/10>=1&&a/10<10)
{ printf("this is 2 steps\n");
b=(int)(a/10);
c=a-b*10;
printf("b=%d c=%d",b,c); break; }
if(a>=1&&a<10);
{ printf("this is 1 step\n");
printf("a=%d",a); break; }
}
getch();
}
疑问是,输入40000以上的数就出错了,请指点!

这么个题目能被你写出这么多代码来,我先看看有什么错,给你个简单点的,还多于5位
#include<stdio.h>
int main()
{
int n, len=0;
int a[11];
scanf("%d",&n);
while(n)
{
a[len]=n%10;
len++;
n/=10;
}
printf("%d位数\n每一位是:",len);
for(n=len-1;n>=0;n--)
{
printf("%d ",a[n]);
}
}

你的没什么问题啊,你用什么编译器啊,不是16位的吧,如果是16位编译器,可能会有溢出
这个是我测试你的程序的结果:
87654
this is 5 steps
b=8 c=7 d=6 e=5 f=4请按任意键继续. . .
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-14
main ()
{
long int a;
int b,c,d,e,f;
scanf("%ld",&a);
while(a>=1&&a<=99999)
{
if(a/10000>=1&&a/10000<10)
{
printf("this is 5 steps\n");
b=a/10000;
c=(int)((a-b*10000)/1000);
d=(int)((a-b*10000-c*1000)/100);
e=(int)((a-b*10000-c*1000-d*100)/10);
f=a-b*10000-c*1000-d*100-e*10;
printf("b=%d c=%d d=%d e=%d f=%d",b,c,d,e,f);break;}
else if(a/1000>=1&&a/1000<10)
{
printf("this is 4 steps\n");
b=(int)(a/1000);
c=(int)((a-b*1000)/100);
d=(int)((a-b*1000-c*100)/10);
e=a-b*1000-c*100-d*10;
printf("b=%d c=%d d=%d e=%d",b,c,d,e); break; }
else if(a/100>=1&&a/100<10)
{ printf("this is 3 steps\n");
b=(int)(a/100);
c=(int)((a-b*100)/10);
d= a-b*100-c*10;
printf("b=%d c=%d d=%d",b,c,d); break; }
else if(a/10>=1&&a/10<10)
{ printf("this is 2 steps\n");
b=(int)(a/10);
c=a-b*10;
printf("b=%d c=%d",b,c); break; }
else if(a>=1&&a<10)
{ printf("this is 1 step\n");
printf("a=%d",a); break; }
}
getch();

}
这样就可以了。注意if 和else if 的区别本回答被提问者采纳
第2个回答  2012-04-30
这样写比较简单,而且输出格式和你一样
#include <stdio.h>
void main()
{
int n, l = 0; //l记录长度
int a[5]; //存放五位数
char ch;
scanf("%d", &n);
for (int i = 0; i < 5; i++)
{
a[i] = n % 10;
if (n > 0)
l++;
n /= 10;
} //将五位数一一截出并求出长度
printf("this is %d step\n", l);
if (l > 0)
printf("a=%d", a[l-1]); //第一位输出无空格
ch = 'a';
for (int i = l - 2; i >= 0; i--)
{
ch++; //ASCII码加一,'a' + 1 = 'b';
printf(" %c=%d", ch, a[i]); //以后输出前带空格
}
}
有看不懂的可以问我
第3个回答  2012-04-30
#include<stdio.h>
main()
{
int a;
int b,c,d,e,f;
scanf("%d",&a);
while(a>=1&&a<=99999)
{
if(a/10000>=1&&a/10000<10)
{
printf("this is 5 steps\n");
b=(int)(a/10000);
c=(int)((a-b*10000)/1000);
d=(int)((a-b*10000-c*1000)/100);
e=(int)((a-b*10000-c*1000-d*100)/10);
f=a-b*10000-c*1000-d*100-e*10;
printf("b=%d c=%d d=%d e=%d f=%d",b,c,d,e,f);break; }
if(a/1000>=1&&a/1000<10)
{
printf("this is 4 steps\n");
b=(int)(a/1000);
c=(int)((a-b*1000)/100);
d=(int)((a-b*1000-c*100)/10);
e=a-b*1000-c*100-d*10;
printf("b=%d c=%d d=%d e=%d",b,c,d,e); break; }
if(a/100>=1&&a/100<10)
{ printf("this is 3 steps\n");
b=(int)(a/100);
c=(int)((a-b*100)/10);
d= a-b*100-c*10;
printf("b=%d c=%d d=%d",b,c,d); break; }
if(a/10>=1&&a/10<10)
{ printf("this is 2 steps\n");
b=(int)(a/10);
c=a-b*10;
printf("b=%d c=%d",b,c); break; }
if(a>=1&&a<10);
{ printf("this is 1 step\n");
printf("a=%d",a); break; }
}

getchar();
}
getch();改为getchar,加上头文件#include<stdio.h>
第4个回答  2012-04-30
#include<stdio.h>
#include<string.h>
void main()
{
char a[5];
int i;
printf("请输入一个正整数:\n");
gets(a);
printf("这是一个%d位数\n",strlen(a));
printf("各个位上的数为:\n");
for(i=0;i<strlen(a);i++)
printf("%d\t",a[i]-'0');
printf("\n");
}

如果你想求更多位数的话,直接把 char a[5],定义更大就可以了。
相似回答