解题思路:
在for循环中用getchar()接收输入的数字字符,并将其ASCII码赋值给temp(temp的数据类型为int),temp==10时(换行“\n”的ASCII码是10)判断输入结束跳出循环,未输入换行前则用count++统计位数,并将temp减48(字符0的ASCII码是48)后赋值给数组储存。
注意事项:
字符0的ASCII码是48,换行“\n”的ASCII码是10,输出第二行时最后一个数特殊处理。
参考代码:
#include <stdio.h> int main() { int i,count=0,x[5]; //count统计位数,x[5]储存数字 for (i=0;i<5;i++) { int temp=0; temp=getchar(); //temp临时储存数字字符的ASCII码 if (temp==10) break; //输入换行\n后跳出for循环 count++; x[i]=temp-48; //字符0的ASCII码是48 } printf("%d\n",count); for (i=0;i<=count-2;i++) printf("%d ",x[i]); printf("%d\n",x[i]); for (i=count-1;i>=0;i--) printf("%d",x[i]); return 0; }
0.0分
235 人评分
#include<stdio.h> int main() { long int x; int sum=0,a; int m=0,n=0,v=0,c=0; scanf("%d",&x); a=x; while(x>0) { x=x/10; sum=sum+1; } printf("%d\t%d\n",a,sum); if(sum==5) { m=a/10000; printf("%d ",m); a=a%10000; sum=sum-1; } if(sum==4) { n=a/1000; printf("%d ",n); a=a%1000; sum=sum-1; } if(sum==3) { v=a/100; printf("%d ",v); a=a%100; sum=sum-1; } if(sum==2) { c=a/10; printf("%d ",c); a=a%10; sum=sum-1; } if(sum==1) printf("%d\n",a); printf("%d%d%d%d%d\n",a,c,v,n,m); return 0; }
第二行的特殊处理,我用\b退格处理怎么不行呢-_-+_+
kojo 2019-04-21 23:52:11 |
#include<stdio.h> int qiushu() { int i,d=0,n,m,k=0,num[4]; scanf("%d",&n); for(i=n;i;k++)i/=10; printf("%d\n",k); for(i=0;i<k;i++){num[i]=n%10;n/=10;} for(i=(k-1);i>0;i--)printf("%d ",num[i]); printf("%d",num[0]); //printf("\b\n"); //此处不用\b,\b为输出左移一位操作、退格怎么不行呢???? printf("\n"); m=k; for(i=1;m>0;m--){d+=num[m-1]*i;i*=10;}//求数,所以还是输出数吧@_@ printf("%d\n",d); scanf("%d",&m); return 0; }
#include<stdio.h> int main(){ int n; int end = 0; int num[5] = {0}; int isError(int n); //判断输入的数是否正确,是则返回False void numDevide(int n, int num[]); //分离输入的数字并存入一个数组 int getEndIndex(int num[]); //得到该数组从后往前第一个不为零元素的位置 void dispReverse(int end, int num[]); //正逆序显示该数字 printf("Input the number from 0-99999:\n"); scanf("%d", &n); while(isError(n)){ if(n == 0){ //如果是0,同样返回错误,但直接将它打印 printf("%d\n", n); printf("%d\n", n); printf("%d\n", n); break; } else{ printf("Input error, retry please:\n"); scanf("%d", &n); } } numDevide(n, num); en
#include<stdio.h> #include<string.h> int main() { char a[100],i; scanf("%s",a); printf("%lu\n",strlen(a)); for( i=0; i<strlen(a); i++){ printf("%c ",a[i]); } printf("\n"); for( i=strlen(a)-1; i>=0; i--){ printf("%c",a[i]); } return 0; }
#include<stdio.h> int main() { int a; int b,c,d,e,f; scanf("%d",&a); if(a>100000||a<0) printf("输入错误\n"); else { if(a/10000>=1) printf("5\n"); else if(a/1000>=1) printf("4\n"); else if(a/100>=1) printf("3\n"); else if(a/10>=1) printf("2\n"); else if(a/1>=1) printf("1\n"); } if(a>100000||a<0) printf("输入错误\n"); else { b=a/10000; c=a/1000%10; d=a/100%10; e=a/10%10; f=a%10; printf("%d %d %d %d %d\n",b,c,d,e,f); printf("%d%d%d%d%d\n",f,e,d,c,b); } return 0; } 我们不一样,全都不一样。
#include <stdio.h> int main(void) { int x,y,a,b,c,d,e; scanf("%d",&x); if (x/10000!=0) y=5; else if (x/1000!=0) y=4; else if(x/100!=0)y=3; else if(x/10!=0)y=2; else y=1; printf("%d\n",y); a=x/10000; b=x/1000%10; c=x/100%10; d=x/10%10; e=x%10; printf("%d %d %d %d %d\n",a,b,c,d,e); printf("%d%d%d%d%d",e,d,c,b,a); return 0; }
#include<stdio.h> int main() { int a[5],b=0,i; char c; while((c=getchar())!='\n'&&b<5){ a[b]=c-48; ++b; } printf("%d\n",b); for(i=0;i<b;i++){ printf("%d ",a[i]); } printf("\n"); for(i=b-1;i>=0;i--){ printf("%d",a[i]); } printf("\n"); return 0; }
5049 2019-05-28 17:11:53 |
第15行输出的是最后一个数,因为题目说最后一个数后面不能有空格,所以他14行的for循环只输出到count-1位数,也就是本题的第4位数.15行已经不属于for循环了