【C刷题记录】【?】数位数字输出

本文探讨了一种程序设计方法,用于判断输入整数的位数及各数字出现的次数。通过具体示例展示了如何使用循环和条件语句来解析整数并统计每个数字的频率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一说一
这题严重影响了我这个菜鸡周六以来的心情,
间接影响了学习欲望 &(不存在的)学习效率。

题目:
判断一个整型数据有几位
从键盘输入一个整型数据(int型),编写程序判断该整数共有几位,并输出包含各个数字的个数。例如,从键盘输入整数16644,该整数共有5位,其中有1个1,2个6,2个4。
程序运行结果示例1:
Please enter the number:
12226↙
12226: 5 bits
1: 1
2: 3
6: 1
程序运行结果示例2:
Please enter the number:
-12243↙
-12243: 5 bits
1: 1
2: 2
3: 1
4: 1
输入格式: “%d”
输出格式:
输入提示信息:“Please enter the number:\n”
判断该整数共有几位:"%d: %d bits\n"
包含数字0的个数:“0: %d\n”
包含数字1的个数:“1: %d\n”
包含数字2的个数:“2: %d\n”
包含数字3的个数:“3: %d\n”
包含数字4的个数:“4: %d\n”
包含数字5的个数:“5: %d\n”
包含数字6的个数:“6: %d\n”
包含数字7的个数:“7: %d\n”
包含数字8的个数:“8: %d\n”
包含数字9的个数:“9: %d\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

程序:
过了的版本。

#include <stdio.h>
#include<math.h>
int main()
{
    int n,a,b,c,d,e,f,g,h,i,j,x=0,y=0;
    a=0;
    b=0;
    c=0;
    d=0;
    e=0;
    f=0;
    g=0;
    h=0;
    i=0;
    j=0;
    printf("Please enter the number:\n");
    scanf("%d",&n);
    x=n;
    do{
            n=fabs(n);
        switch(n%10)
        {
            case 0:a++;break;
            case 1:b++;break;
            case 2:c++;break;
            case 3:d++;break;
            case 4:e++;break;
            case 5:f++;break;
            case 6:g++;break;
            case 7:h++;break;
            case 8:i++;break;
            default :j++;
        }
        n=n/10;
    }while(n);
    y=a+b+c+d+e+f+g+h+i+j;
    printf("%d: %d bits\n",x,y);
    if(a){printf("0: %d\n",a);}
    if(b){printf("1: %d\n",b);}
    if(c){printf("2: %d\n",c);}
    if(d){printf("3: %d\n",d);}
    if(e){printf("4: %d\n",e);}
    if(f){printf("5: %d\n",f);}
    if(g){printf("6: %d\n",g);}
    if(h){printf("7: %d\n",h);}
    if(i){printf("8: %d\n",i);}
    if(j){printf("9: %d\n",j);}
    return 0;
}

2分的版本
(eg.1234567890 用dev编译可以出正确结果,cb不行,会有2个8)
(也不知道系统是用什么验证的_躺)
一开始想着用位数做就用了log结果没想到比上面简单粗暴的那一版还磨人
还要想log的范围啊各种,又分出来很多种讨论
应该还是有问题没有找出来

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
    int n,m,a,b,c,d,e,f,g,h,i,j,k,x,y;
    a=0;
    b=0;
    c=0;
    d=0;
    e=0;
    f=0;
    g=0;
    h=0;
    i=0;
    j=0;
    printf("Please enter the number:\n");
    scanf("%d",&n);
    x=n;
    y=x%10;
    if (n!=0)
    {
    	n=fabs(n);
    m=log10(n);
    printf("%d: %d bits\n",n,m+1);
    if (m!=0)
    {
        do
    {
      k=n/pow(10,m);
      switch(k)
      {
            case 0:a++;
			break;
			case 1:b++;
            break;
            case 2:c++;
            break;
            case 3:d++;
            break;
            case 4:e++;
            break;
            case 5:f++;
            break;
            case 6:g++;
            break;
            case 7:h++;
            break;
            case 8:i++;
            break;
            case 9:j++;
            break;
      }
    n=n-k*pow(10,m);
    m--;
   }while (m>0);
          switch(y)
            {
            case 0:a++;
			break;
			case 1:b++;
            break;
            case 2:c++;
            break;
            case 3:d++;
            break;
            case 4:e++;
            break;
            case 5:f++;
            break;
            case 6:g++;
            break;
            case 7:h++;
            break;
            case 8:i++;
            break;
            case 9:j++;
            break;
            }
    }
    else if (m==0)
    {
        switch(x)
            {
            case 0:a++;
			break;
			case 1:b++;
            break;
            case 2:c++;
            break;
            case 3:d++;
            break;
            case 4:e++;
            break;
            case 5:f++;
            break;
            case 6:g++;
            break;
            case 7:h++;
            break;
            case 8:i++;
            break;
            case 9:j++;
            break;
            }
    }
    if (a!=0)printf("0: %d\n",a);
    if (b!=0)printf("1: %d\n",b);
    if (c!=0)printf("2: %d\n",c);
    if (d!=0)printf("3: %d\n",d);
    if (e!=0)printf("4: %d\n",e);
    if (f!=0)printf("5: %d\n",f);
    if (g!=0)printf("6: %d\n",g);
    if (h!=0)printf("7: %d\n",h);
    if (i!=0)printf("8: %d\n",i);
    if (j!=0)printf("9: %d\n",j);
	}
    else
    {
    	printf("%d: %d bits\n",n,n);
    	printf("0: %d\n",n);

	}
    return 0;
}

你记得过段时间回来看看这个孩子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值