这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用strlen( ) 函数得到字符串长度,即为数字位数
将字符串从左到右遍历输出(带空格)
最后还有一个回车不要忘了
再将字符串从右往左遍历输出(不带空格)就好了
注意事项:
题目说数字位数不超过5,所以定义字符数组长度应不小于6
因为字符串结尾还有结尾符 '\0' 占一位
参考代码:
#include <stdio.h> #include <string.h> //C语言字符串头文件,strlen() 函数包含在此内 int main() { char str[10]; //定义字符串长度为 10 scanf("%s", str); //输入数字 (作为字符串输入) int len = strlen(str); //获取字符串长度 printf("%d\n", len); //输出字符串长度,即为数字位数 for (int i = 0; i < len; i++) //从左往右遍历输出 { printf("%c ", str[i]); } printf("\n"); //输出回车 for (int i = len - 1; i >= 0; i--) //从右往左遍历输出 { printf("%c", str[i]); } return 0; }
下面是常规思路:
前面我们说过要进行三个循环,第一个循环要确定数字的位数
那么可以用一个 while 循环,将这个数字不断地除以 10
每除一次,位数加 1 ,知道数字变为 0 为止
第二个循环,就要用到 pow 计算幂函数了
对于一个数字
要得到它的个位数,就用它除以 10 的 0 次方 再对 10 取余
要得到它的十位数,就用它除以 10 的 1 次方 再对 10 取余
要得到它的百位数,就用它除以 10 的 2 次方 再对 10 取余
……
要得到它的第 i 位 (从右往左),就用它除以 10 的 i - 1 次方 再对 10 取余即可
那么我们可以对这里 10 的指数循环,从 n - 1 循环到 0
然后计算并输出数字即可,如下:
for (int i = n - 1; i >= 0; i--) { temp = num / pow(10, i); //除以 10 的 i 次方 printf("%d ", temp % 10); //输出对 10 取余 }
第三个循环就简单多了,把第二个循环倒过来,从 0 循环到 n - 1 即可
参考代码:
#include <stdio.h> #include <math.h> //C语言数学头文件,pow() 函数包含在此内 int main() { int num; //定义数字 scanf("%d", &num); //输入数字 int n = 0; //定义数字的位数 if (num == 0) n = 1; //如果数字是0,则位数为1 int temp = num; //定义 temp 来代替 num 进行计算 while (temp) { //将temp循环除以 10,到 0 为止 n++; temp /= 10; } printf("%d\n", n); //输出数字位数 for (int i = n - 1; i >= 0; i--) { //第二循环,从左往右输出 temp = num / pow(10, i); //除以 10 的 i 次方 printf("%d ", temp % 10); //输出对 10 取余 } printf("\n"); //输出回车 for (int i = 0; i < n; i++) { //第三循环,从右往左循环 temp = num / pow(10, i); //除以 10 的 i 次方 printf("%d", temp % 10); //输出对 10 取余 } return 0; }
题目中说第二行输出最后没有空格,之前没有注意到,但是因为判定没有那么严格也通过了
那要处理结尾空格的话,可以把数字和空格分开输出,加一个 if 语句判定是否到了结尾,要不要输出空格
如下:
//字符串方法 for (int i = 0; i < len; i++) //从左往右遍历输出 { printf("%c", str[i]); if (i != len - 1) printf(" "); // i == len - 1 时即为最后一个数字,不输出空格 }
//常规方法 for (int i = n - 1; i >= 0; i--) { //第二循环,从左往右输出 temp = num / pow(10, i); //除以 10 的 i 次方 printf("%d", temp % 10); //输出对 10 取余 if (i != 0) printf(" "); // i == 0 时即为最后一个数字,不输出空格 }
0.0分
372 人评分
#include <stdio.h> #include <stdlib.h> int main() { int m,x; scanf("%5d",&m); printf("------------------------\n"); if(m>=10000) { printf("5\n"); x=5; printf("\n"); } if(m>=1000&&m<=9999) { printf("4\n"); x=4; printf("\n"); } if(m>=100&&m<=999) { printf("3\n"); x=3; printf("\n"); } if(m>=10&&m<=99) { printf("2\n"); x=2; printf("\n"); } if(m>=1&&m<=9) { printf("1\n"); x=1; pr
#include<stdio.h> int main() { int num,n; scanf("%d", &num); if (num <10) n = 1; else if (num <100) n = 2; else if (num <1000) n = 3; else if (num <10000) n = 4; else if (num <100000) n = 5; else printf("请输入一个1-5位数字的数\n"); printf("%d\n",n); switch(n){ case 1: { printf("%d\n",num); printf("%d\n",num); break; } case 2: { printf("%d %d\n",num/10,num%10); printf("%d%d\n",num%10,num/10%10);
坚持每天在线 2022-03-30 20:00:10 |
break; } case 3: { printf("%d %d %d ",num/100,num%100/10,num%10); printf("%d%d%d ",num%10,num%100/10,num/100); break; } case 4: { printf("%d %d %d %d ",num/1000,num%1000/100,num%100/10,num%10); printf("%d%d%d%d ",num%10,num%100/10,num%1000/100,num/1000); break; } case 5: { printf("%d %d %d %d %d ",num/10000,num%10000/1000,num%1000/100,num%100/10,num%10); printf("%d%d%d%d%d ",num%10,num%100/10,num%1000/100,num%10000/1000,num/10000); break; } } return 0; }
坚持每天在线 2022-03-30 20:00:39 |
没人比我更常规了吧啊啊
清水啊 2022-03-31 17:03:14 |
卧槽 这个 牛逼
#include<stdio.h> #include<math.h> #include<stdlib.h> int main(void) { int a, b; scanf("%d", &a); if (a / 10 >= 1000) { b = 5; } else if (a / 10 >= 100) { b = 4; } else if (a / 10 >= 10) { b = 3; } else if (a / 10 >= 1) { b = 2; } else { b = 1; } printf("%d\n", b); if (b > 1) { for (int i = pow(10,b-1); i >= 10; i/=10) { if (i == pow(10, b-1)) { printf("%d ", a / i); } else { printf("%d ", a /i%10); } } printf("%d\n", a % 10); } else { printf("%d\n", a); } for (int i = 10; i <= pow(10,b-1); i*=10) { if(i==10) { p
Kaiiiiiix 2022-03-25 15:42:37 |
我这是真的白中白
#include<stdio.h> #include<stdlib.h> int main() { int n,N,yuan,i,yuan2; n=0; scanf("%d",&N); system("cls"); yuan=N; yuan2=N; while(N!=0) { N=N/10; n++; } printf("%d\n",n); char s[n+1]; for(i=1;i<=n-1;i++) { s[i]=yuan%10; yuan=yuan/10; printf("%d ",s[i]); } i++; s[i]=yuan; printf("%d\n",s[i]); for(i=1;i<=n;i++) { s[i]=yuan2%10; yuan2=yuan2/10; printf("%d",s[i]); } return 0; }
我想我才是最小白的那个,发出来丢人现眼一下... # include <stdio.h> int main(void) { int n,a,b,c,d,e; scanf("%d",&n); a=n/10000; b=n%10000/1000; c=n%1000/100; d=n%100/10; e=n%10; if(e!=0) { if(d!=0) { if(c!=0) { if(b!=0) { if(a!=0) { printf("%d\n%d %d %d %d ",5,a,b,c,d); printf("%d\n",e); printf("%d%d%d%d%d\n",e,d,c,b,a); } else { printf("%d\n%d %d %d ",4,b,c,d); printf("%d\n",e); printf("%d%d%d%d\n",e,d,c,b); } } else { printf("%d\n%d %d ",3,c,d); printf("%d\n",e); printf("%d%d%d%d\n",e,d,c);
实话我这可能是非常常规的思路,很初级的考虑 #include<stdio.h> int main(){ int x,a,b,c,d,e; scanf("%d",&x); a=x/10000; b=(x%10000)/1000; c=(x%10000)%1000/100; d=(x%10000)%1000%100/10; e=(x%10000)%1000%100%10; if(x/10000>=1){ printf("5\n"); printf("%d %d %d %d %d\n",a,b,c,d,e); printf("%d",e*10000+d*1000+c*100+b*10+a); } else if(x/1000>=1){ printf("4\n"); printf("%d %d %d %d\n",b,c,d,e); printf("%d",e*1000+d*100+c*10+b); } else if(x/100>=1){ printf("3\n"); printf("%d %d %d\n",c,d,e); printf("%d",e*100+d*10+c); } else if(x/10>=1){ pri
纯小白硬写,不用pow函数不用数组不用字符串的办法 #include<stdio.h> int main() { int a,i,j; scanf("%d", &a); for(i=1,j=0;i<a;i=10*i) { j++; } printf("%d\n",j); for(i=i/10;i>1;i=i/10){ printf("%d ",a/i%10); } printf("%d\n",a%10); for(;a>0;a=a/10){ printf("%d",a%10); } }
24601号菜鸟 2022-03-22 14:09:55 |
厉害,比我的简洁好多
常规做法的话两次循环就可以,正排序和逆排序数的获得可以在一个循环里:参见 #include<stdio.h> int main(void) { int a,wei[5],i,co=1,re=0,t=1; scanf("%d",&a); wei[0]=a%10; for(i=1;i<5;i++) { a/=10; wei[i]=a%10; if(a!=0) co+=1; } printf("%d\n",i); for(i=co-1;i>=0;i--) { if(i>0) { printf("%d ",wei[i]); } re+=wei[i]*t; t*=10; } printf("%d\n",wei[0]); printf("%d",re); return 0; }
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:651 |
ASCII帮了大忙浏览:797 |
淘淘的名单 (C语言代码)答案错误???浏览:624 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
用筛法求之N内的素数。 (C语言代码)浏览:711 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1325 |
数组与指针的问题浏览:760 |
蛇行矩阵 (C语言代码)浏览:560 |