这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用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 a,b,c,d,e; int i,x,flag=0; scanf_s("%d", &x); for (i = 1; i < 100000; i = i * 10) if (x / i != 0) flag=flag+1; printf("%d\n", flag); if (flag == 5) { a = x / 10000; b = x / 1000 % 10; c = x / 100 % 10; d = x / 10 % 10; e = x % 10; } if (flag == 4) { b = x / 1000 % 10; c = x / 100 % 10; d = x / 10 % 10; e = x % 10; } if (flag == 3) { c = x / 100 % 10; d = x / 10 % 10; e = x % 10; } if (flag == 2) { d = x / 10 % 10; e = x % 10; } if (flag == 1) { e = x % 10; } if(flag==5) printf("%d %d %d %d %d",
#include<stdio.h> int main() { int i,len; char a[5]; for(i=0; i<5; i++){ a[i]=getchar(); if(a[i]=='\n'){ break; } } len = i; printf("%d\n",len); for(i=0; i<=len-1; i++){ if(i==len-1){ printf("%c",a[i]); }else{ printf("%c ",a[i]); } } printf("\n"); for(i=len-1; i>=0; i--){ printf("%c",a[i]); } return 0; } 为什么不对啊,看了好久都没看出来怎么回事,求大佬帮助
#include<stdio.h> #include<math.h> int main() { int N; scanf_s("%d", &N); int M = N; int a; for (a = 1; N > 10; a++) { N /= 10; } printf("%d\n", a); int m[100] = {}; int b; for (b = a; b > 0; b--) { m[b] = M / pow(10, b - 1); M-=m[b]* pow(10, b - 1); printf("%d", m[b]); if (b != 1) { printf(" "); } } int F=0; int e = a; for (int c = 1; c <= a; c++) { F += m[c] * pow(10,e-1); e -= 1; } printf("\n%d\n", F); return 0; }
#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,
#include<stdio.h> int main() { int n,cnt=0; scanf("%d",&n); int c=n,d=n; while(n>0) { n/=10; cnt++; }//得到了这个数的位数 int cnt1=cnt; printf("%d\n",cnt); int i=cnt,b=1; while(i>1) { b*=10; i--; } int a[cnt]; for(cnt;cnt>0;cnt--) { printf("%d ",c/b); a[cnt]=c/b; c%=b; b/=10; } printf("\n"); int m; for(m=1;m<=cnt1;m++) { printf("%d",a[m]); } return 0; }
#include<stdio.h> int main() { /*12345 5 1 2 3 4 5 54321*/ int a; int n = 0; scanf("%d",&a); int b = a; while(a>0){ a /= 10; n++; } printf("%d\n",n); int mask = 1; while(n > 1){ mask *= 10; n--; } int d; int c = b; do{ d = b / mask; b = b % mask; printf("%d",d); mask /= 10; printf(" "); }while(mask>0); printf("\n"); while(c!=0){ int t = c % 10; c /= 10; printf("%d",t); } return 0; }
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:913 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:674 |
用筛法求之N内的素数。 (C语言代码)浏览:1386 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:1114 |
【排队买票】 (C语言代码)浏览:944 |
局部变量作函数返回值的问题浏览:1029 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:644 |
Hello, world! (C语言代码)浏览:916 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:812 |
数列问题 (C语言代码)浏览:1068 |
dotcpp0640379 2023-02-06 21:17:02 |
在C语言中数组名代表该数组第一个元素的地址(或者说该数组的起始地址),所以不用加地址符