这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用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; b = 1; int t = 0; int cot = 0; int m = 0; scanf("%d", &a); while (a > 0) { b = a % 10; a = a / 10; t = t * 10 + b; cot++; } printf("%d", cot); printf("\n"); m = t; while (t > 0) { b = t % 10; t = t / 10; printf("%d", b); if (t > 0) { printf(" "); } else { printf("\n"); } } printf("%d", m); return 0; }
#include<stdio.h> #include<string.h> int main() { char str[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; } 为什么编译器会报错
觅凡霜 2023-11-10 09:50:29 |
兄弟,for语句括号后面不用;eg: for( ; ; )在这后面不用加;了
#include<stdio.h> #include<string.h> int main() { char str[10]; scanf("%s",&str); int len; len=strlen(str); printf("\n"); for(i=0;i<len-1;i++) { printf("%c",str[i]); if(i!=len-1) printf(" "); } printf("\n"); for(i=len-1;i>=0;i--) { printf("%c",str[i]); if(i!=len-1) printf(" "); } }
#include<stdio.h> int main() { int m ,n,c,a,b,tmp; scanf("%d %d",&m,&n); while(n!=0) { m=a; n=b; tmp=a%b; a=b; b=tmp; } printf("%d ",a); c=(m*n)/a; printf("%d",c); return 0; } 编译也没问题,为什么运行不了啊?求各位大佬解答
阿文 2023-11-12 20:23:11 |
a=m?我问你怎么跳出while循环,你都没有限制n
case 5: { a=num/10000; b=(num/1000)%10; c=(num/100)%10; d=(num/10)%10; e=num%10; printf("%d %d %d %d %d\n",a,b,c,d,e); printf("%d%d%d%d%d\n",e,d,c,b,a); break; } } return 0; }
case 3: { a=num/100; b=(num/10)%10; c=num%10; printf("%d %d %d\n",a,b,c); printf("%d%d%d\n",c,b,a); break; } case 4: { a=num/1000; b=(num/100)%10; c=(num/10)%10; d=num%10; printf("%d %d %d %d\n",a,b,c,d); printf("%d%d%d%d\n",d,c,b,a); break; }
一个笨方法 #include<stdio.h> int main() { int num,n,a,b,c,d,e; scanf("%d",&num); if(num/10==0) n=1; else if(num/10<10) n=2; else if(num/10<100) n=3; else if(num/10<1000) n=4; else if(num/10<10000) n=5; printf("%d\n",n); //先确定位数 switch(n) //后根据位数,确定后边两个问题 { case 1: a=num; printf("%d\n",a); printf("%d\n",a); break; case 2: { a=num/10; b=num%10; printf("%d %d\n",a,b); printf("%d%d\n",b,a); break; } 竟然有字数限制,在下一个评论区
dotcpp0678717 2023-07-19 16:55:14 |
case 3: { a=num/100; b=(num/10)%10; c=num%10; printf("%d %d %d ",a,b,c); printf("%d%d%d ",c,b,a); break; } case 4: { a=num/1000; b=(num/100)%10; c=(num/10)%10; d=num%10; printf("%d %d %d %d ",a,b,c,d); printf("%d%d%d%d ",d,c,b,a); break; } case 5: { a=num/10000; b=(num/1000)%10; c=(num/100)%10; d=(num/10)%10; e=num%10; printf("%d %d %d %d %d ",a,b,c,d,e); printf("%d%d%d%d%d ",e,d,c,b,a); break; } } return 0; }
一只机械狗 2023-08-03 15:32:38 |
感谢铁铁,C语言笨笨唯一能看懂写出来的
人见人爱A+B (C语言代码)浏览:664 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:782 |
printf基础练习2 (有点不明白)浏览:887 |
1124题解浏览:630 |
循环入门练习5 (C语言代码)浏览:908 |
【偶数求和】 (C语言代码)浏览:460 |
简单的a+b (C语言代码)浏览:1024 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:650 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:489 |
快速排序算法1浏览:996 |