不会C语言。给出几个算法,代码是fortran的,供参考。
第一种,用整数除法。对于整数a,连续用10除,直到商为零。除法的次数,即为位数。
这个算法对于正负整数和零都能获得正确的结果。
第二种,用对数函数直接计算。对a取绝对值,再计算10为底的对数,所得结果取整数部分,再加1,即为位数。由于log10函数的变量不能是整数,需要a*1.0转换为实数。又由于log10的变量不能是0,因此针对a=0的情形,通过max将其转换成1.0。
第三种,逐个数数字的个数。将a取绝对值,写入字符串,统计字符串中不为空(为数字)的字节数,即为位数。
可以使用循环语句,具体代码如下
#include
int main()
{
int n, c=0;
scanf(”%d”,&n);
while(n!=0)
{
n=n/10;
c++;
}
printf(“这个整数有%d位数\n”,c)
return 0;
}
比较简单的一个题目,运用while循环就可以实现
#include
int main()
{ int n=1;
char c;
while((c=getchar())==' '||c=='-');
while((c=getchar())>='0'&&c<='9')n++;
printf("这是一个%d位数\n",n);
return 0;
}
#include
int func(int n)
{
int i=0;
do
{
i++;
}while(n/=10);
return i;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",func(n));
return 0;
}
#include
#include
//统计有多少个数字
int calc(int num){
int count=0;
num=abs(num); //使用绝对值,保证判断的时候不管什么情况,都是正数
if(num==0){
count++;
}else{
while(num!=0){
num%10;
count++;
num/=10;
}
}
return count;
}
void main(){
int n;
printf("请输入一个整数:");
scanf("%d",&n);
printf("数字%d是一个%d位数!\n",n,calc(n));
}