我一直在努力解决这个问题,即计算数字的总数,我的代码部分工作。它适用于第一次尝试,但在第二次尝试中,计数增加了先前的计数。请帮忙。
#include<stdio.h>
int main()
{
int num,x,i,n,count=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&num);
while(num!=0)
{
count++;
num=num/10;
}
printf("%d\n",count);
}
return 0;
}
答案 0 :(得分:5)
您的代码有两个问题:
count
和0
有零位数第一个问题的原因之一是您不限制变量的范围,事先声明所有变量。相反,您应该在需要它们的最紧密的范围内声明它们:i
应该在循环标头中声明,而count
应该在for
循环内声明和初始化。
对于零处理,添加一个特殊情况,在输入零时打印1
,或切换到do
/ while
循环。
答案 1 :(得分:1)
计数加上先前的计数。
(重新)在开始(结束)之前将其设置为0
:
for (i = 1; i <= n; i++)
{
count = 0;
commented作为StoryTeller,更清晰的方法是在需要的范围内定义变量:
#include <stdio.h>
int main(void)
{
int n = 0; /* Have it initialised, just in case scanf() fails. */
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int num = 0; /* Have it initialised, just in case scanf() fails. */
scanf("%d", &num);
/* Scope of counting: */
{
int count = 0;
while (num != 0)
{
count++;
num = num / 10;
}
printf("%d\n", count);
}
}
return 0;
}
答案 2 :(得分:0)
您需要在每个循环中将count
重置为0
。
此代码应该可以正常工作:
#include<stdio.h>
int main()
{
int num,x,i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
int count=0; // rest the count on each loop
scanf("%d",&num);
while(num!=0)
{
count++;
num=num/10;
}
printf("%d\n",count);
}
return 0;
}
答案 3 :(得分:0)
如果要计算十进制数字,可以尝试以下操作:
#include<stdio.h>
long count_digits(long number) {
return number >= 10 ?
count_digits(number/10) + 1
: 1;
}
int main()
{
long num = 123456789;
long num2 = 1234567891234567888;
printf("%d\n", count_digits(num));
printf("%d\n", count_digits(num2));
return 0;
}
输出:
9
19