我试图计算一个数字范围内的数字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;
}
答案 0 :(得分:1)
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应该是什么。