这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用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<math.h> int main() { int a,b,c,d,e,x; int i = 0,j,k; scanf("%d",&x); a = x; c = x; d = x; do { a = a/10; i++; } while(a!=0); printf("%d\n",i); for(j=i-1;j>=0;j--) { b = c/pow(10,j); if(j>0) printf("%d ",b); else printf("%d\n",b); c = c %(int)pow(10,j); } for(k=1;k<=i;k++) { e = d%10; printf("%d",e); d = d/10; } return 0; }
#include<stdio.h> int main() { int a,b=0,c; scanf("%d",&a); c=a; while(c!=0) { c /=10; b++; } printf("%d\n",b); printf("%d %d %d %d %d\n",a/10000,a/1000%10,a/100%10,a/10%10,a%10); printf("%d%d%d%d%d",a%10,a/10%10,a/100%10,a/1000%10,a/10000); return 0; } 求大佬帮忙看一下 哪里错了 为啥提交显示错误啊
白甫 2024-03-31 11:01:15 |
你这个只考虑了五位数情况,题目是说不多余五位数,输入其他情况比如说三位数,你后面两个printf还是会输出五位,
#include<stdio.h> #include <string.h> //C语言字符串头文件,strlen() 函数包含在此内 int main() { char s[6]; scanf("%s", s); int a=strlen(s); printf("%d\n", a); int i = 0; while(i<a) { printf("%c ", s[i]); i++; } printf("\n"); int x = a - 1; while (x >=0) { printf("%c", s[x]); x--; } return 0; }
#include <stdio.h> int main() { char arr[6] = { 0 }; gets(arr); printf("%d\n", strlen(arr)); for (int i = 0; i < strlen(arr); i++) { printf("%c", arr[i]); if (i < strlen(arr) - 1) printf(" "); } printf("\n"); for (int i = strlen(arr) - 1; i >= 0; i--) { printf("%c", arr[i]); } return 0; }
#include<stdio.h> #include<string.h> int main() { char a[6]; scanf("%s",&a); int len=strlen(a); printf("%d\n",len); int i; for(i=0;i<len;i++){ printf("%c ",a[i]); if(i!=len-1) printf(" "); } printf("\n"); for(;i>=0;i--) printf("%c",a[i]); return 0; }
各位大佬,为什么我编译器是对的,但是这个地方不对 #include <stdio.h> #include <math.h> int main() { int x,len,a=1; int y; scanf("%d",&x); while(a!=0){ a = x / pow(10,len+1); len++; } printf("%d\n" , len); for(int i=len-1;i>=0;i--){ y = x / pow(10,i); printf("%d ",y%10); } printf("\n"); for(int i=0;i<len;i++){ y = x / pow(10,i); printf("%d ",y%10); } printf("\n"); return 0; }
white 2024-02-01 22:00:17 |
我知道了,最后输出的是54321,我是5 4 3 2 1
#include<stdio.h> #include<math.h> int main() { int num,n; scanf("%d",&num); int temp=num; while(temp) { temp/=10; n++; } printf("%d\n",n); for(int i=n-1;i>=0;i--) { temp=num/pow(10,i); printf("%d",temp%10); if(i!=0) printf(" "); } printf("\n"); for(int i=0;i<n;i++) { temp=num/pow(10,i); printf("%d",temp%10); } return 0; } 为啥输出超限啊各位大佬,我寻思这不都一样的吗
qaz 2024-03-04 15:27:39 |
#include<stdio.h> #include<math.h> int main() { int num,n=0; scanf("%d",&num); int temp=num; while(temp) { temp/=10; n++; } printf("%d\n",n); for(int i=n-1;i>=0;i--) { temp=num/pow(10,i); printf("%d",temp%10); if(i!=0) printf(" "); } printf("\n"); for(int i=0;i<n;i++) { temp=num/pow(10,i); printf("%d",temp%10); } return 0; }
printf基础练习2 (C语言代码)浏览:605 |
简单的a+b (C++语言代码)浏览:895 |
程序员的表白 (C语言代码)浏览:706 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:769 |
C语言训练-亲密数 (C语言代码)浏览:697 |
1113题解浏览:823 |
陈教主的三角形 (C语言代码)浏览:1196 |
C语言程序设计教程(第三版)课后习题12.6 (C语言代码)浏览:732 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:692 |