计算数字范围内特定数字的出现次数

时间:2018-04-05 10:11:38

标签: c++ debugging

我试图计算一个数字范围内的数字2(例如2-22,答案是6: 2,12,20,21,22 as 22贡献两次)。这是我提出的代码,但它在输入值后无法运行。有什么想法吗?

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    int lowerbound,upperbound,sum=0;
    int nofNum(int num);
    scanf("%d %d",&lowerbound,&upperbound);
    for (int i=lowerbound;i<=upperbound;++i){
        sum+=nofNum(i);
    }
    printf("%d",sum);
    return 0;
}
int nofNum(int num){
    int count=0;
    while(num!=0){
        if (num%10==2){
            count++;
            num/=10;
        }
    }
    return count;
}

1 个答案:

答案 0 :(得分:1)

你正在使用c而不是c ++。你的错误是nofNum在你使用它之前没有被声明。必须在使用它之前声明它。

int nofNum(int num);

会宣布它。 你仍然需要实现它,你已经完成了它。

或者你可以移动实现st。它在主要的上方,你使用它。

编辑:我刚刚看到你在main里面宣布它,这在很多情况下是不常见的。你真的不应该这样做。

EDIT2:     你搞砸了numOf中的if语句

int nofNum(int num){
int count=0;
while(num!=0){
    if (num%10==2){
        count++;
    }
    num/=10; // may not be inside if, since num would not be adjusted 
             // if the last digit isnt a 2
}
return count;
}

EDIT3: 您可以在c ++中使用输入和输出流来替换scanf和printf:

scanf("%d %d",&lowerbound,&upperbound);

变为

std::cin >> lowerbound >> upperbound;

printf("%d",sum);

成为

std::cout << sum << std::endl;

Edit4:

建议表格:

// declarations - this is what would belong to the *.h file later on.
int nofNum(int num);

接着是

int nofNum(int num) { /*implementation*/ }
int main(int /*argc*/, char* /*argv*/[]) { /*implementation*/ }

// this is valid because we allready heard of nofNum through declaration
int main(int /*argc*/, char* /*argv*/[]) { /*implementation*/ } 
int nofNum(int num) { /*implementation*/ }

上层表单不需要声明,因为在使用它们之前已经实现了每个函数,因此编译器已经知道nofNum应该是什么。