CodeRookie


私信TA

用户名:Shmily124

访问量:120729

签 名:

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

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

337 人评分

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

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

#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]);
	}
}
2022-07-31 16:58:08
这运行结果没问题,为啥一提交就答案错误的
#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;
}
2022-07-10 16:21:14
#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;
}
2022-05-24 00:04:11
题目要求不多于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;
}
2022-04-26 00:03:25
#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-04-20 12:07:47
#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]);
	}
}
2022-04-20 10:03:08
#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;
 }
2022-04-13 19:40:17
#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