这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用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 i=0; char arr[5]; scanf("%s",arr); int a=sizeof(arr)/sizeof(arr[0]); printf("%d\n",a); for(i=0;i<4;i++) { printf("%c ",arr[i]); } printf("%c",arr[4]); printf("\n"); for(i=4;i>=0;i--) { printf("%c",arr[i]); } return 0; } 哪里错了?有没有大佬帮忙看看
#include<stdio.h> #include<math.h> int main() { int m,n=1,a,b,c,d,h,k; scanf("%d",&d); printf("这个数字是%d ",d); k=m=d; while(m/10) { n++; a=m%10; printf("%d ",a); if(m/10>=1&&m/10<=9) { b=m/10; printf("%d\n",b); } m=m/10; } for(h=n-1;h>=0,k>0;h--) { c=k/pow(10.0,h); printf("%d ",c); k=k-c*pow(10.0,h); } return 0; }
#include<stdio.h> int main() { int i,j,k,n,m,l; scanf("%d",&i); if(i<0||i>100000){ printf("输入不合法,请重新输入:"); scanf("%d",&i); } j=i/10; if(j==0){ printf("1\n"); printf("%d\n",i); printf("%d\n",i); } if(j>0&&j<10){ printf("2\n"); k=i%10; printf("%d %d\n",j,k); printf("%d%d\n",k,j); } if(j>10&&j<100){ printf("3\n"); j=j/10; k=i%10/10; n=i%10; printf("%d %d %d\n",j,k,n); printf("%d%d%d\n",n,k,j); } if(j>100&&j<1000){ printf("4\n"); j=j/100;//千位 k=i/100%10;//百位 n=i%100/10;//十位 m=i%10;//个位
else if (wan==0) printf ("%d %d %d %d\n%d%d%d%d",qian,bai,shi,ge,ge,shi,bai,qian); else printf ("%d %d %d %d %d\n%d%d%d%d%d",wan,qian,bai,shi,ge,ge,shi,bai,qian,wan); return 0; 有没有大佬看看我这个哪里不对,运行答案是和题目答案一样的,但只能得80分。
#include<stdio.h> int main() { int a,ge,shi,bai,qian,wan; scanf("%d",&a); if (a/10000!=0) printf ("5\n"); else if (a/1000!=0) printf ("4\n"); else if(a/100!=0) printf("3\n"); else if (a/10!=0) printf ("2\n"); else printf ("1\n"); ge=a%10; shi=a/10%10; bai=a/100%10; qian=a/1000%10; wan=a/10000%10; if (shi==0) printf ("%d\n%d",ge,ge); else if (bai==0) printf ("%d %d\n%d%d",shi,ge,ge,shi); else if (qian==0) printf ("%d %d %d\n%d%d%d",bai,shi,ge,ge,shi,bai);
#include <stdio.h> #include <math.h> int main(void) { int num,i; scanf ("%d",&num); int n = 0; if (num==0) { n=1; } int temp; temp = num; while(temp) { temp/=10; ++n; } printf("%d\n",n); for(i=n-1;i>=0;i--) { temp=num/pow(10,i); printf("%d ",temp%10); } printf("\n"); for(i=0;i<=4;i++) { temp=num/pow(10,i); printf("%d",temp%10); } return 0; } 为啥我这个运行是对的,但只有二十分
int n[6],a=0,b=0,c=0; int num,i,j; scanf("%d",&num); for(i=0;num>0;i++) { n[a]=num%10; num/=10; a++; } printf("%d\n",i); for(j=0;j<=a-1;j++) { printf("%d\t",n[j]); } printf("\n"); while(c<=a-1) { b=b*10+n[c]; c++; } printf("%d",b);
#include<stdio.h> int main() { int j; char a[6]; for(int i=0;i<6;i++) { scanf("%c",&a[i]); if(a[i]=='\n') j=i; } printf("%d\n",j); for(int i=0;i<5;i++) { printf("%c ",a[i]); } for(int i=5;i>=0;i--) { printf("%c",a[i]); } return 0; }
永远的丰碑 (C语言代码)浏览:698 |
简单的a+b (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:541 |
三角形 (C++代码)记忆化搜索浏览:1318 |
【计算球体积】 (C语言代码)浏览:1158 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:721 |
1054题解浏览:516 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:639 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:935 |
A+B for Input-Output Practice (III) (C++代码)浏览:584 |
八嘎 2024-11-15 21:35:39 |
操作符里%c不能忽视空格,所以输入1234,会打印有5个数
123241wd 2024-11-17 23:12:50 |
arr前面是不是要加&