有一说一
这题严重影响了我这个菜鸡周六以来的心情,
间接影响了学习欲望 &(不存在的)学习效率。
题目:
判断一个整型数据有几位
从键盘输入一个整型数据(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;
}
你记得过段时间回来看看这个孩子。