这是从输入的整数中计算出特定数字的代码。我已经这样做了:
#include<stdio.h>
int main() {
int number, digitToCount;
scanf("%d %d", &number, &digitToCount);
int counter = 0;
while (number != 0) {
int tempDigit = number % 10;
if (tempDigit == digitToCount)
counter++;
number = number / 10;
}
printf("%d", counter);
return counter;
}
但是有什么办法可以做到这一点吗?这个方法正确吗?下面这段代码的错误在哪里?
#include<stdio.h>
int main() {
int c = 0, n, t = 0, d;
printf("Enter an integer number:");
scanf("%d", &n);
printf("desired digit:");
scanf("%d", &d);
char str[50], str2[0];
sprintf(str, "%d", n);
sprintf(str2, "%d", d);
for (t = 0; t <= 50; t++) {
if (str2[0] == str[t]) {
c = c + 1;
}
}
printf("%d", c);
return c;
}
任何形式的帮助将不胜感激。提前致谢!
最佳答案
尽管您可以采用后一种方法,但它的效率可能低于前一种方法。您不会注意到对于这种大小的问题,但值得注意的是格式化(即在文本和内部数据类型之间转换)相对昂贵。
更糟糕的是,在第二种方法中,您尝试从文本转换为数字,然后再转换回文本。为什么?这并不是完全毫无意义,因为它会稍微改变程序在某些非数字输入情况下的行为(它会以不同的方式失败),但如果您希望数据作为字符数组,那么就以这种方式读取它首先:
#include<stdio.h>
int main() {
char str[50], d;
int c = 0, t;
printf("Enter an integer number:");
scanf("%49s", str);
printf("desired digit:");
scanf("%c", &d);
for (t = 0; str[t] != '\0'; t++) {
if (str[t] == d) {
c = c + 1;
}
}
printf("%d", c);
return 0;
}
这仍然存在问题,主要是围绕验证您的输入,但它应该适用于有效的输入,并且对于一些可能无效的输入具有可能有用的行为。
关于c - C 中输入整数的特定位数计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567343/