CodeRookie


私信TA

用户名:Shmily124

访问量:133741

签 名:

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

等  级
排  名 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 人评分

  评论区

#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
2022-04-03 00:47:56
#include<stdio.h>
int main()
{
    int num,n;
    scanf("%d", &num);
    if (num <10)
        n = 1;
    else if (num <100)
        n = 2;
    else if (num <1000)
        n = 3;
    else if (num <10000)
        n = 4;
    else if (num <100000)
        n = 5;
    else
        printf("请输入一个1-5位数字的数\n");
    printf("%d\n",n);
    
    switch(n){
        case 1:
            {
            printf("%d\n",num);
            printf("%d\n",num);
            break;
            }
        case 2:
            {
            printf("%d %d\n",num/10,num%10);
            printf("%d%d\n",num%10,num/10%10);
2022-03-30 19:59:17
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(void)
{
	int a, b;
	scanf("%d", &a);
	if (a / 10 >= 1000)
	{
		b = 5;		
	}
	else if (a / 10 >= 100)
	{
		b = 4;
	}
	else if (a / 10 >= 10)
	{
		b = 3;
	}
	else if (a / 10 >= 1)
	{
		b = 2;
	}
	else
	{
		b = 1;
	}
	printf("%d\n", b);
	if (b > 1)
	{
		for (int i = pow(10,b-1); i >= 10; i/=10)
		{
			if (i == pow(10, b-1))
			{
				printf("%d ", a / i);
			}
			else 
			{
				printf("%d ", a /i%10);
			}
		}
		printf("%d\n", a % 10);
	}
	else
	{
		printf("%d\n", a);
	}
	for (int i = 10; i <= pow(10,b-1); i*=10)
	{
		if(i==10)
		{
			p
2022-03-25 15:40:32
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n,N,yuan,i,yuan2;
    n=0;
    scanf("%d",&N);
    system("cls");
	yuan=N;
	yuan2=N;
    while(N!=0)
    {
        N=N/10;
        n++;
    }
    printf("%d\n",n);
    char s[n+1];
    for(i=1;i<=n-1;i++)
    {
        s[i]=yuan%10;
        yuan=yuan/10;
        printf("%d ",s[i]);
    }
    i++;
    s[i]=yuan;
    printf("%d\n",s[i]);
    for(i=1;i<=n;i++)
    {
        s[i]=yuan2%10;
        yuan2=yuan2/10;
        printf("%d",s[i]);
    }
    return 0;
}
2022-03-20 18:51:27
我想我才是最小白的那个,发出来丢人现眼一下...
# include <stdio.h>
int main(void)
{
	int n,a,b,c,d,e;
	scanf("%d",&n);
	a=n/10000;
	b=n%10000/1000;
	c=n%1000/100;
	d=n%100/10;
	e=n%10;
	if(e!=0)
	{
		if(d!=0)
		{
			if(c!=0)
			{
				if(b!=0)
				{
					if(a!=0)
					{
						printf("%d\n%d %d %d %d ",5,a,b,c,d);
						printf("%d\n",e);
						printf("%d%d%d%d%d\n",e,d,c,b,a);
					}
					else
					{
						printf("%d\n%d %d %d ",4,b,c,d);
						printf("%d\n",e);
						printf("%d%d%d%d\n",e,d,c,b);
					}
				}
				else
				{
					printf("%d\n%d %d ",3,c,d);
					printf("%d\n",e);
					printf("%d%d%d%d\n",e,d,c);
2022-03-16 15:39:06
实话我这可能是非常常规的思路,很初级的考虑
#include<stdio.h>
int main(){
	int x,a,b,c,d,e;
	scanf("%d",&x);
	a=x/10000;
	b=(x%10000)/1000;
	c=(x%10000)%1000/100;
	d=(x%10000)%1000%100/10;
	e=(x%10000)%1000%100%10;
	if(x/10000>=1){
		printf("5\n");
		printf("%d %d %d %d %d\n",a,b,c,d,e);
		printf("%d",e*10000+d*1000+c*100+b*10+a);
	}
	else if(x/1000>=1){
		printf("4\n");
		printf("%d %d %d %d\n",b,c,d,e);
		printf("%d",e*1000+d*100+c*10+b);	
	}
	else if(x/100>=1){
		printf("3\n");
		printf("%d %d %d\n",c,d,e);
		printf("%d",e*100+d*10+c);	
	}
	else if(x/10>=1){
		pri
2022-03-11 00:20:01
纯小白硬写,不用pow函数不用数组不用字符串的办法
#include<stdio.h>
int main()
{
    int a,i,j;
	scanf("%d", &a);
    for(i=1,j=0;i<a;i=10*i)
	{
	 j++;	
    }   
    printf("%d\n",j);
    
    for(i=i/10;i>1;i=i/10){
    printf("%d ",a/i%10);
}
	printf("%d\n",a%10); 
    
	for(;a>0;a=a/10){
	printf("%d",a%10);
	}
}
2022-03-07 18:43:36
常规做法的话两次循环就可以,正排序和逆排序数的获得可以在一个循环里:参见
#include<stdio.h>
int main(void)
{
    int a,wei[5],i,co=1,re=0,t=1;
    scanf("%d",&a);
    wei[0]=a%10;
    for(i=1;i<5;i++)
    {
	a/=10;
    wei[i]=a%10;
	if(a!=0)
	co+=1;
	}
	printf("%d\n",i);
	for(i=co-1;i>=0;i--)
	{
	if(i>0)
	{
	printf("%d ",wei[i]);
	}
	re+=wei[i]*t;
	t*=10;
	}
	printf("%d\n",wei[0]);
	printf("%d",re);
    return 0;
}
2022-03-05 22:38:20