顺序输出各位数字

输入一个整数,从高位开始逐位分割并输出各位数字。
输入一个正整数n,n是int型数据
依次输出各位上的数字,每一个数字后面有一个空格,输出占一行。例如,输入 12345
,输出 1 2 3 4 5

#include<stdio.h>
#include<math.h>
int main()
{
int n, ws;
scanf("%d", &n);
ws=(int)log10(n)+1;
switch(ws)
{
case 9: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 8: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 7: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 6: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 5: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 4: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 3: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 2: printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);
case 1: printf("%d ",(int)n/pow(10,ws-1));
printf("\n");
return 0;
}
}
这样写为什么不对呀,求解释。。。。

第1个回答  推荐于2017-12-15
#include<stdio.h>
#include<math.h>
int main()
{
int n, ws,i;
scanf("%d", &n);
ws=(int)log10(n)+1;
for(i=1;i<=ws;i++)
{
printf("%d ",n/(int)pow(10,ws-i));
n=n%(int)pow(10,ws-i);
}
}
上面是能够完成楼主任务的程序
你的程序中的问题是:
1、(int)n/pow(10,ws-1)强制转换的是n的值的类型,而没有去转换真正需要转换的
pow(10,ws-1),也就是说起码你该写成n/(int)pow(10,ws-1)
2、不能每个case后的语句都是printf("%d ",(int)n/pow(10,ws-1));n=n%(int)pow(10,ws-1);,比如你输入的是739401后,switch里面你要输出六个数字,而每次都是n除以10^5,即使是在n=9401的情况下也是用这个n除以10^5,显然这是不对的,此时真正应该除的是10^3
祝楼主在学习C的过程中不断进步本回答被提问者和网友采纳
第2个回答  2012-11-30
楼主想的有点复杂了,给你一个简单易懂的,递归算法!
#include<stdio.h>
void print_bit(unsigned int n)
{
if(n>10)
print_bit(n/10);
printf("%d ",n%10);
}
int main(void)
{
int n;
scanf("%d",&n);
print_bit(n);
}
相似回答