这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用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> int main() { int n,w; scanf("%d",&n); int a[5]={0}; for(int i=0;i<=4;i++) { a[i]=n%10; if(n/10>0) n=n/10; else { printf("%d\n",i+1); w=i+1;break;} if(i==4) { printf("5\n"); w=5;} } for(int i=w-1;i>=0;i--) { printf("%d ",a[i]); } printf("\n"); for(int i=0;i<=w-1;i++) { printf("%d",a[i]); } return 0; }
//用已学的写的 #include<stdio.h> int main() { int n; int a,b=0; scanf("%d",&n); a=n; do { a/=10; ++b; } while(a>0); printf("%d\n",b); switch(b) { case 5: printf("%-2d",n/10000%10); case 4: printf("%-2d",n/1000%10); case 3: printf("%-2d",n/100%10); case 2: printf("%-2d",n/10%10); case 1: printf("%d\n",n%10); default: ; } a=n; do { printf("%d",a%10); a/=10; } while(a>0); return 0; }
int main() { int x,y,count=0; scanf_s("%5d",&x); while (x) { x =x / 10; count++; } printf("%d", count); printf("\n"); for (int i =4; i >= 0; i--) { y =x / pow(10, i); printf("%d", y % 10); if (i != 0) { printf(" "); } } printf("\n"); for (int j = 0; j < 5; j++) { y =x / pow(10, j); printf("%d", y%10 ); } printf("\n"); } 为什么后面两行输出都是0呢
itachi 2023-04-10 00:53:24 |
因为你的x的值被while循环改变了,但你的错误还有很多
#include <stdio.h> int main(void) { int i,j,n,m; i = 0; j = 0; int num[6]={0,0,0,0,0}; scanf("%d",&n); while(n!=0) { m = n % 10; num[i] = m; i++; n = n / 10; } for(i=0;i<6;i++) { if (num[i]>0) j++; } printf("%d\n",j); for(i=5;i>=0;i--) { if (num[i]>0) printf("%d ",num[i]); } printf("\n"); for(i=0;i<6;i++) { if(num[i]>0) printf("%d",num[i]); } return 0; } 最后只有80分,有一个测试点没过,是哪里有问题啊,求大佬帮助
悠游 2023-07-02 19:11:08 |
你在后面输出的时候都只计数数组中不为0的,你这样要是输12305不就错了
整数也包含负数,如果用你的代码输入-12345,答案就错了
王博 2023-03-04 15:36:04 |
#include<stdio.h> int main() { char a[10]; scanf("%s",&a); int len = strlen(a); printf("%d ",len); for (int i=0;i<=len;i++) { printf("%c ",a[i]); } printf(" "); for (int i=len-1;i>=0;i--) { printf("%c",a[i]); } return 0; }为什么我输出每一位和输出倒叙之间没换行啊我明明有
#include <stdio.h> #include <math.h> int main() { int num, n, temp,x,y; scanf_s("%d", &num); temp = num; for (n = 0; temp > 0; n++) { temp /= 10; } printf("%d\n", n); int i = n; while (i > 0) { i--; x = num / pow(10, i); printf("%d ", x % 10); } printf("\n"); while (i < n) { i++; y = num / pow(10, (i-1 )); printf("%d",y % 10); } return 0; }
#include<stdio.h> #include<string.h> int main() { const int len=5; char number[len]; int i; scanf("%s",&number); printf("%d\n",strlen(number)); for(i=0;i<len;i++) { printf("%c",number[i]); if(i == len-1) { printf("\n"); } else printf(" "); } for(i=len-1;i>=0;i--) { printf("%c",number[i]); } return 0; } 运行都是对的,为什么一提交就错啊
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:701 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:615 |
程序员的表白 (C语言代码)浏览:1466 |
printf基础练习2 (C语言代码)浏览:322 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:568 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
关于C语言变量位置的问题浏览:294 |
1012题解浏览:938 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:537 |
字符串比较 (C语言代码)浏览:770 |