问题描述
- c基础问题,新手求解!
-
给一个不多于5位数的正整数,要求:
1.求出它是几位数;
2.分别输出每一位数;
3.按逆序输出各位数字。
(我只用if语句写的代码如下,看看那些错了,非常感谢!)#include<stdio.h> int main() { int x,i,j,k,z,y,s; scanf("%d",&x); if(x>99999&&x<0) printf("It is error"); else { s=x/10; i=x%10; if(s==0) printf("%dn",i); else { j=x/100; if(j==0) { printf("%dn",j); printf("%d%dn",i,j); } else { k=x/1000; if(k==0) { printf("%dn",k); printf("%d%dn",i,j,k); } else { z=x/10000; if(z==0) { printf("%dn",z); printf("%d%dn",i,j,k,z); } else { y=x/100000; if(y==0) { printf("%dn",y); printf("%d%dn",i,j,k,z,y); } } } } } } return 0; }
解决方案
断点调试,追踪每一步结果
解决方案二:
你完全可以把拆出来的每一个数存到一个数组里,然后看有几位,逆序输出不都很方便了吗?还有你的拆分每一个数可以用循环啊直接
解决方案三:
int x,i=0,j=0,m;
int a[5];
scanf("%d",&x);
if(x>99999&&x<0)
printf("It is error");
else
{
do
{
m=x%10;
x/=10;
i++;
a[i]=m;
}while(x>0);
}
printf("输入的是%d位数n",i);
printf("正序输出:n");
for(j=i;j>0;j--)
printf("第%d位为%dn",j,a[j]);
printf("逆序输出:n");
for(j=1;j<i+1;j++)
printf("第%d位为%dn",j,a[j]);
system("pause");
return 0;
解决方案四:
int x,i=0,j=0,m;
int a[5];
scanf("%d",&x);
if(x>99999&&x<0)
printf("It is error");
else
{
do
{
m=x%10;
x/=10;
i++;
a[i]=m;
}while(x>0);
}
printf("输入的是%d位数n",i);
printf("正序输出:n");
for(j=i;j>0;j--)
printf("第%d位为%dn",j,a[j]);
printf("逆序输出:n");
for(j=1;j<i+1;j++)
printf("第%d位为%dn",j,a[j]);
system("pause");
return 0;
这个不错
解决方案五:
private static void ceShi1(int n){
int x=n;
int y;
int m;
String a[] ={"个","十","百","千","万"};
if (x<=0 || x>99999) {
if (x==0) {
System.out.println(x);
}else{
System.out.println("Error");
}
}else{
for (int i = 0; i < 5; i++) {
m = x/10;
y = x%10;
if (m==0 && y==0) {
System.out.println("结束");
break;
}else{
x = m;
}
System.out.println(a[i]+"位是"+y);
}
}
用java写的,改改也是一样的效果。