CodeRookie


私信TA

用户名:Shmily124

访问量:133736

签 名:

清风前烹茶对弈,明月下把酒言欢

等  级
排  名 14
经  验 22985
参赛次数 7
文章发表 39
年  龄 0
在职情况 学生
学  校 ZUA
专  业 计科

  自我简介:

悄悄地秃头,然后惊艳所有人?

这题如果按常规思路说实话有点折磨人

先循环确定位数,再循环正序输出,还要循环倒序输出

几乎是相同的操作做了三遍

个人认为用字符数组来处理应该最为简便


解题思路

将输入的数字当作字符串来储存,用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 人评分

  评论区

第一个方法中,scanf中的地址符为什么不用打啊?后来加上之后运行结果也正确(刚开始学C语言的小白,哪一位大佬可以帮忙解答解答?)
2023-02-01 21:25:58
#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",
2023-01-26 23:00:06
运行没有问题,为什么一提交就说结果错误
2022-12-01 19:30:56
#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;
}

为什么不对啊,看了好久都没看出来怎么回事,求大佬帮助
2022-11-07 23:02:14
#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;
}
2022-10-30 21:57:43
#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,
2022-10-20 21:00:00
#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;
}
2022-10-06 15:07:38
#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;
}
2022-09-24 10:36:56