鱼C论坛

 找回密码
 立即注册
查看: 2140|回复: 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
  1. #include <stdio.h>

  2. int f1(int num) {
  3.         int res = 0;
  4.         do res++;
  5.         while (num /= 10);
  6.         return res;
  7. }

  8. void f2(int num)  {
  9.         if (!num) return;
  10.         f2(num / 10);
  11.         printf("%d ", num%10);
  12. }

  13. void f3(int num) {
  14.         if (!num) return;
  15.         printf("%d ", num%10);
  16.         f3(num / 10);
  17. }

  18. int main(void) {

  19.         // 给一个不多于 5位的正整数
  20.         int num = 5284;
  21.        
  22.         // 1. 求出它是几位数
  23.         printf("%d 位数\n", f1(num));
  24.        
  25.         // 2. 分别输出每位数字
  26.         f2(num), printf("\n");
  27.        
  28.         // 3. 按逆输出各位数字
  29.         f3(num);
  30.        
  31.         return 0;
  32. }
复制代码
  1. 4 位数
  2. 5 2 8 4
  3. 4 8 2 5
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2023-3-5 10:15:49 | 显示全部楼层
  1. int main()
  2. {
  3.     char numch[6]={0};
  4.     scanf("%s",numch);
  5.     int i=0;
  6.     while(numch[i])i+=1;
  7.     printf("%d\n",i);
  8.     i=0;
  9.     while(numch[i])
  10.     {
  11.         printf("%c",numch[i]);
  12.         i+=1;
  13.     }
  14.     printf("\n");
  15.     while(--i>=0)
  16.     {
  17.         printf("%c",numch[i]);
  18.     }
  19.     return 0;

  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2023-3-5 20:23:49 | 显示全部楼层
谢谢大神们的解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int f1(int num) {
  3.         int res = 0;
  4.         do res++;
  5.         while (num /= 10);
  6.         return res;
  7. }

  8. void f2(int num)  {
  9.         if (!num) return;
  10.         f2(num / 10);
  11.         printf("%d ", num%10);
  12. }

  13. void f3(int num) {
  14.         if (!num) return;
  15.         printf("%d ", num%10);
  16.         f3(num / 10);
  17. }

  18. int main(void) {

  19.         // 给一个不多于 5位的正整数
  20.         int num = 5284;
  21.        
  22.         // 1. 求出它是几位数
  23.         printf("%d 位数\n", f1(num));
  24.        
  25.         // 2. 分别输出每位数字
  26.         f2(num), printf("\n");
  27.        
  28.         // 3. 按逆输出各位数字
  29.         f3(num);
  30.        
  31.         return 0;
  32. }
复制代码
  1. 4 位数
  2. 5 2 8 4
  3. 4 8 2 5
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 04:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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