鱼C论坛

 找回密码
 立即注册
查看: 1720|回复: 5

[已解决]给一个不多于5位的正整数,1.求出它是几位数2.分别输出每一位数字3.按逆输出各位数字

[复制链接]
发表于 2023-3-4 23:17:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
  long int a,b,c,d,e,q,m;
  scanf("%d",&m);
  m=a*10*10*10*10+b*10*10*10+c*10*10+d*10+e;
  if(a)
          printf("位数%d\n",q=4+1);
  else if(a==0&&b!=0)
      printf("位数%d\n",q=3+1);
  else if(a==0&&b==0&&c!=0)
          printf("位数%d\n",q=2+1);
  else if(a==0&&b==0&&c==0&&d!=0)
          printf("位数%d\n",q=1+1);
  else if(a==0&&b==0&&c==0&&d==0&&e!=0)
      printf("位数%d\n",q=0+1);
  printf("每一位数%d,%d,%d,%d,%d\n",a,b,c,d,e);
  if(a)
      printf("逆%d%d%d%d%d\n",e,d,c,b,a);
  else if(a==0&&b)
      printf("逆%d%d%d%d\n",e,d,c,b);
  else if(a==0&&b==0&&c)
          printf("逆%d%d%d\n",e,d,c);
  else if(a==0&&b==0&&c==0&&d)
      printf("逆%d%d\n",e,d);
  return 0;
}
编译只有a,b,c,d,e没有初始化的警告,并不出错,调试输入m显示值错误,求大神解答
最佳答案
2023-3-5 23:59:41
#include <stdio.h>

int f1(int num) {
        int res = 0;
        do res++;
        while (num /= 10);
        return res;
}

void f2(int num)  {
        if (!num) return;
        f2(num / 10);
        printf("%d ", num%10);
}

void f3(int num) {
        if (!num) return;
        printf("%d ", num%10);
        f3(num / 10);
}

int main(void) {

        // 给一个不多于 5位的正整数
        int num = 5284;
        
        // 1. 求出它是几位数
        printf("%d 位数\n", f1(num));
        
        // 2. 分别输出每位数字
        f2(num), printf("\n");
        
        // 3. 按逆输出各位数字
        f3(num);
        
        return 0;
}
4 位数
5 2 8 4 
4 8 2 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-4 23:50:37 From FishC Mobile | 显示全部楼层
这个写法莫名给我一种 Prolog 语言的感觉,还是先解决一下这些警告再说吧?忽视警告可不是好主意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 10:15:49 | 显示全部楼层
int main()
{
    char numch[6]={0};
    scanf("%s",numch);
    int i=0;
    while(numch[i])i+=1;
    printf("%d\n",i);
    i=0;
    while(numch[i])
    {
        printf("%c",numch[i]);
        i+=1;
    }
    printf("\n");
    while(--i>=0)
    {
        printf("%c",numch[i]);
    }
    return 0;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 10:46:00 | 显示全部楼层
本帖最后由 两手空空儿 于 2023-3-5 10:48 编辑
 scanf("%d",&m);
  m=a*10*10*10*10+b*10*10*10+c*10*10+d*10+e;
这两句是什么意思,输入了一个m,马上就把m赋值成了一个不确定的数。。。。。。
把m的值直接破坏了,这个输出的结果不可能正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 20:23:49 | 显示全部楼层
谢谢大神们的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 23:59:41 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

int f1(int num) {
        int res = 0;
        do res++;
        while (num /= 10);
        return res;
}

void f2(int num)  {
        if (!num) return;
        f2(num / 10);
        printf("%d ", num%10);
}

void f3(int num) {
        if (!num) return;
        printf("%d ", num%10);
        f3(num / 10);
}

int main(void) {

        // 给一个不多于 5位的正整数
        int num = 5284;
        
        // 1. 求出它是几位数
        printf("%d 位数\n", f1(num));
        
        // 2. 分别输出每位数字
        f2(num), printf("\n");
        
        // 3. 按逆输出各位数字
        f3(num);
        
        return 0;
}
4 位数
5 2 8 4 
4 8 2 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 17:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表