CodeRookie


私信TA

用户名:Shmily124

访问量:121350

签 名:

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

等  级
排  名 14
经  验 21443
参赛次数 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分

339 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#include<stdio.h>

int main()
{
	int n,t,a,b,c,d,e;
	scanf("%d",&n);
	t=n/10;
	if(t<1){
		printf("1\n");
		printf("%d\n",n);
		printf("%d",n);	}
		
	else if(t>=1&&t<10){
		printf("2\n");
		a=n/10%10;
		b=n/1%10;
		printf("%d %d\n",a,b);
		printf("%d%d",b,a);
		}
		
	else if(t>=10&&t<100){
		printf("3\n");
		a=n/100%10;
		b=n/10%10;
		c=n/1%10;
		printf("%d %d %d\n",a,b,c);
		printf("%d%d%d",c,b,a);
		}		
		
	else if(t>=100&&t<1000){
		printf("4\n");
		a=n/1000%10;
		b=n/100%10;
		c=n/10%10;
		d=n/1%10;
		printf("%d %d %d %d\n",a,b,c,d);
		printf("%d%d%d%d",d,c,b,a);
		}
		
	else {
	printf("5\n
2021-11-28 16:20:58
这个程序如果输入10000 逆序输出这个数00001 也就是说应该输出的是1才对 输出00001有一点不妥吧
2021-11-23 20:22:18
#include<stdio.h>
int main()
{
int number,x,m,count=0,z=0,t,f,h,c,b;int fun(int b);
printf("请输入:");
scanf("%d",&x);t=x;f=x;
while(x>0)
{count++;
x/=10;
}
printf("%d\n",count);
h=count;
while(t>0)
{z++;c=fun(count);number=t/c;t=t-number*c;count--;printf("%d",number);if(z!=h)printf(" ");
}
printf("\n");
while(f>0)
{
m=f%10;printf("%d",m);f/=10;
}
return 0;
}

int fun(int b)
{int a,z=1;
for(a=2;a<=b;a++)
{
z*=10;
}
return(z);
}
2021-11-13 19:54:54
#include <stdio.h>
int main()
{
    int n,a,b,c,d,e;
	scanf("%d",&n);
	a=n/10000;
	b=(n-a*10000)/1000;
	c=(n-a*10000-b*1000)/100;
	d=(n-a*10000-b*1000-c*100)/10;
	e=(n-a*10000-b*1000-c*100-d*10);
	if(a!=0)
	{
		printf("%d\n",5);
		printf("%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e);
		printf("%d%d%d%d%d\n",e,d,c,b,a);
	}
	if(a==0&&b!=0)
	{
		printf("%d\n",4);
		printf("%d\t%d\t%d\t%d\n",b,c,d,e);
		printf("%d%d%d%d\n",e,d,c,b);
	}
	if((a==0&&b==0)&&c!=0)
	{
		printf("%d\n",3);
		printf("%d\t%d\t%d\n",c,d,e);
		printf("%d%d%d\n",e,d,c);
	}
	if((a==0&&b==0)&&c==0)
	{
		printf("%d\n",2);
		printf("%d\t%d\n"
2021-11-13 16:24:10
#include<stdio.h>
#include<math.h>
int main()
{
	int n,a,w,z;
	scanf("%d",&n);
	z=n;
	w=(int)(log10(n)+1);
	a=pow(10,(int)(log10(n)+0.00001));
	printf("%d\n",w);
	while(a>=1)
			{
			    printf("%d ",n/a);
			    n=n%a;
			    a=a/10;
			}
	while(z>0)//120
	{
		printf("%d",z%10);
		z=z/10;
			}
	return 0;
}
2021-11-08 20:13:36
#include <stdio.h>
#include <string.h>
int main()
{char str;
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;
}
2021-11-06 19:34:21
这道题我拿来自定义函数练手,导致最后代码太长,评论区写不下XD
2021-10-21 16:39:30
思路都真好
2021-10-06 20:48:03