这题如果按常规思路说实话有点折磨人
先循环确定位数,再循环正序输出,还要循环倒序输出
几乎是相同的操作做了三遍
个人认为用字符数组来处理应该最为简便
解题思路
将输入的数字当作字符串来储存,用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分
337 人评分
#include <stdio.h> #include <string.h> #include<stdlib.h> int main() { char num[6]; int numberOfnum; gets_s(num); system("cls"); numberOfnum = strlen(num); printf("%d\n", numberOfnum); for (int i = 0; i < numberOfnum; i++) { printf("%c ", num[i]); } printf("\n"); for (int i = numberOfnum; i >= 0; i--) { printf("%c", num[i]); } }
这运行结果没问题,为啥一提交就答案错误的 #include<stdio.h> #include<string.h> int main(void) { char str[10]; scanf("%s", str); int len = strlen(str); printf("%d\n", len); int a=0; while (a<len) { printf("%c", str[a]); a++; if (str[a] != '0') { printf(" "); } } printf("\n"); while (a <=len&&a>=0) { str[a]= str[len-a]; a--; printf("%c", str[a]); } return 0; }
Fan1颖儿 2022-10-17 22:19:19 |
strlen在这没用
#include<stdio.h> #define N 5 int main() { int n, i = 0, arr[N]={0}; scanf("%d", &n); do { arr[i] = n % 10; i++; } while (n = n / 10); int sz = i; printf("整数位数:%d\n", sz); for (i = 0; i < sz; i++) printf("%d ", arr[i]); return 0; }
题目要求不多于5位数,我的代码在这个基础上,你要求不超过m位数,我只需要第二行改成#define n m+1即可 #include<stdio.h> #define n 6 int main() { int a,b,x[n]; scanf("%d",&a); b=a; //判断几位数 int t=1; for(int i=1;i<=n;i++){ a=a/10; if(a!=0){ t++; } if(a==0) break; } printf("%d\n",t); //将各位数放入数组 while(b!=0){ for(int i=1;b!=0;i++){ x[i]=b%10; b=b/10; } } //从右到左输出 for(int i=t;i>=2;i--){ printf("%d ",x[i]); } printf("%d",x[1]); printf("\n"); //从左到右输出 for(int i=1;i<=t;i++){ printf("%d",x[i]); } return 0; }
#include<stdio.h> int main(){ int num,n,i=0,j=0; int a[10]; scanf("%d",&num); n=num/10; if(n==0){ printf("%d\n",num); printf("%d\n",num); }//一位数 else{ while(n!=0){//当前剩的位数不是一个 a[i]=num%10;//取出个位数存放 i++;//加一表示存放后多加一个位数并且数组序号后移 num=num/10; n=num; } printf("%d\n",i); for(j=i-1;j>=0;j--){//i表示个数,数组最后一个序号是i-1 printf("%d ",a[j]); } printf("\n"); for(j=0;j<=i-1;j++){ printf("%d",a[j]); } }//不是一位数 return 0; }
小白 2022-07-11 10:48:11 |
这代码好像有点问题,如果是一位数的话就不行了
#include<stdio.h> #define N 5 int main(){ char a[N]; int i,j,temp; for(i=0;i<N;i++){ scanf("%c",&a[i]); } printf("%d\n",i); for(i=0;i<N;i++){ printf("%c ",a[i]); } // max = a[0]; for(i=0;i<N;i++){ for(j=i+1;j<N;j++){ if(a[i] < a[j]){ temp = a[i]; a[i] = a[j]; a[j] = temp; } } } puts(""); for(i=0;i<N;i++){ printf("%c",a[i]); } }
#include <stdio.h> #include <math.h> int main() { int a=0; int b=0; int c=0; int cnt=1; int cnt2; int number1=0; int number2=0; scanf("%d",&a); c=a; for(b=a;b/10>0;cnt++){ b/=10; } printf("%d\n",cnt); cnt2=cnt; while(cnt>0){ number1=c/pow(10,cnt-1); int i=pow(10,cnt-1); c=c%i; if(cnt!=1){ printf("%d ",number1); }else{ printf("%d",number1); } cnt--; } printf("\n"); while(cnt2>0){ int o; o=pow(10,cnt2-1); number2=a%10; printf("%d",number2); a=a/10; cnt2--; } return 0; }
#include <stdio.h> #include <stdlib.h> int main() { int m,x; scanf("%5d",&m); printf("------------------------\n"); if(m>=10000) { printf("5\n"); x=5; printf("\n"); } if(m>=1000&&m<=9999) { printf("4\n"); x=4; printf("\n"); } if(m>=100&&m<=999) { printf("3\n"); x=3; printf("\n"); } if(m>=10&&m<=99) { printf("2\n"); x=2; printf("\n"); } if(m>=1&&m<=9) { printf("1\n"); x=1; pr
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:927 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1029 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:438 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:518 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:647 |
【蟠桃记】 (C语言代码)浏览:1021 |
Cylinder (C语言描述,蓝桥杯)浏览:1247 |
a+b浏览:432 |
数组与指针的问题浏览:716 |
简单的a+b (C语言代码)浏览:944 |