CodeRookie


私信TA

用户名:Shmily124

访问量:133706

签 名:

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

等  级
排  名 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>
int main()
{
	int i=0;
	char arr[5];
	scanf("%s",arr);
	int a=sizeof(arr)/sizeof(arr[0]);
	printf("%d\n",a);
	for(i=0;i<4;i++)
	{
		printf("%c ",arr[i]);
	}
	printf("%c",arr[4]);
	printf("\n");
	for(i=4;i>=0;i--)
	{
		printf("%c",arr[i]);
	}
	return 0;
}
哪里错了?有没有大佬帮忙看看
2024-11-14 21:00:10
#include<stdio.h>
#include<math.h>
int main()
{
  int m,n=1,a,b,c,d,h,k;
  scanf("%d",&d);
  printf("这个数字是%d ",d);
  k=m=d;
  while(m/10)
  {
    n++;
	a=m%10;
	printf("%d ",a);
	if(m/10>=1&&m/10<=9)
	{
	  b=m/10;
	  printf("%d\n",b);
	}
	m=m/10;
  }
  for(h=n-1;h>=0,k>0;h--)
  {
    c=k/pow(10.0,h);
	printf("%d ",c);
    k=k-c*pow(10.0,h);
  }
  return 0;
}
2024-11-02 15:49:59
#include<stdio.h>
int main()
{
	int i,j,k,n,m,l;
	scanf("%d",&i);
	if(i<0||i>100000){
	printf("输入不合法,请重新输入:");
	    scanf("%d",&i);
	}
	j=i/10;
	if(j==0){
	    printf("1\n");
	    printf("%d\n",i);
	    printf("%d\n",i);
	}
	if(j>0&&j<10){
	    printf("2\n");
	    k=i%10;
	    printf("%d %d\n",j,k);
	    printf("%d%d\n",k,j);
	}
	if(j>10&&j<100){
	    printf("3\n");
	    j=j/10;
	    k=i%10/10;
	    n=i%10;
	    printf("%d %d %d\n",j,k,n);
	    printf("%d%d%d\n",n,k,j);
	}
	if(j>100&&j<1000){
	    printf("4\n");
	    j=j/100;//千位
	    k=i/100%10;//百位
	    n=i%100/10;//十位
	    m=i%10;//个位
2024-10-17 22:57:34
else if (wan==0)
          printf ("%d %d %d %d\n%d%d%d%d",qian,bai,shi,ge,ge,shi,bai,qian);
             else 
             printf ("%d %d %d %d %d\n%d%d%d%d%d",wan,qian,bai,shi,ge,ge,shi,bai,qian,wan);
    return 0;          
有没有大佬看看我这个哪里不对,运行答案是和题目答案一样的,但只能得80分。
2024-10-17 19:51:00
#include<stdio.h>
int main()
{
   int a,ge,shi,bai,qian,wan;
   scanf("%d",&a);
   if (a/10000!=0)
   printf ("5\n");
     else if (a/1000!=0)
     printf ("4\n");
       else if(a/100!=0)
       printf("3\n");
          else if (a/10!=0)
          printf ("2\n");
             else 
             printf ("1\n");
    ge=a%10;
    shi=a/10%10;
    bai=a/100%10;
    qian=a/1000%10;
    wan=a/10000%10;
    if (shi==0)
    printf ("%d\n%d",ge,ge);
      else if (bai==0)
      printf ("%d %d\n%d%d",shi,ge,ge,shi);
        else if (qian==0)
        printf ("%d %d %d\n%d%d%d",bai,shi,ge,ge,shi,bai);
2024-10-17 19:48:48
#include <stdio.h>
#include <math.h>

int main(void)
{
    int num,i;
    scanf ("%d",&num);
    int n = 0;
    if (num==0)
    {
    n=1;
    }
    int temp;
    temp = num;
    while(temp)
    {
    temp/=10;
    ++n;
    }
    printf("%d\n",n);
    for(i=n-1;i>=0;i--)
    {
    temp=num/pow(10,i);
    printf("%d ",temp%10);
    }
    printf("\n");
    for(i=0;i<=4;i++)
    {
    temp=num/pow(10,i);
    printf("%d",temp%10);
    }
return 0;
}
为啥我这个运行是对的,但只有二十分
2024-10-16 20:50:14
int n[6],a=0,b=0,c=0;
    int num,i,j;
    scanf("%d",&num);
    for(i=0;num>0;i++)
    {
        n[a]=num%10;
        num/=10;
        a++;
    }
    printf("%d\n",i);
    for(j=0;j<=a-1;j++)
    {
        printf("%d\t",n[j]);
    }
    printf("\n");
    while(c<=a-1)
    {
        b=b*10+n[c];
        c++;
    }
    printf("%d",b);
2024-10-13 17:49:58
#include<stdio.h>
int main()
{
	int j;
	char a[6];
	for(int i=0;i<6;i++)
	{
	    scanf("%c",&a[i]);
		if(a[i]=='\n')
		j=i;		
	}
	printf("%d\n",j);
	for(int i=0;i<5;i++)
	{
	    printf("%c ",a[i]);		
	}
	for(int i=5;i>=0;i--)
	{
	    printf("%c",a[i]);		
	}

	return 0;
}
2024-08-05 15:31:23