为什么不能正确划分
Why is it not dividing correctly
为什么这段代码分割不正确?
这段代码应该找到所有的总和可以mod b
(从1
到a
),以及不能[=38=的数字].
然后输出和.
的平均值
代码:
#include <iostream>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
double asum = 0, bsum = 0;
double acnt = 0, bcnt = 0;
double ansa = 0, ansb = 0;
for(int i = 1; i<=a; i++){
if(i%b == 0){
asum+=i;
acnt++;
}else{
bsum+=i;
bcnt++;
}
}
cout << asum << " " << acnt << endl;
cout << bsum << " " << bcnt << endl;
ansa = asum / acnt;
ansb = bsum / bcnt;
printf("%.1lf", &ansa);
cout << " ";
printf("%.1lf",&ansb);
return 0;
}
输入:
100 16
现在的输出:
0.0 0.0
正确输出
56.0 50.1
有谁知道发生了什么事吗?
printf("%.1lf", &ansa);
%lf 格式说明符要求参数的类型为 double
(传递 float
也可以,因为它会被转换)。 &ansa
的类型是 double*
,这是一种不同的类型。程序的行为未定义。
我建议使用 std::cout
。在使用它时更容易不完全破坏你的程序。
为什么这段代码分割不正确?
这段代码应该找到所有的总和可以mod b
(从1
到a
),以及不能[=38=的数字].
然后输出和.
代码:
#include <iostream>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
double asum = 0, bsum = 0;
double acnt = 0, bcnt = 0;
double ansa = 0, ansb = 0;
for(int i = 1; i<=a; i++){
if(i%b == 0){
asum+=i;
acnt++;
}else{
bsum+=i;
bcnt++;
}
}
cout << asum << " " << acnt << endl;
cout << bsum << " " << bcnt << endl;
ansa = asum / acnt;
ansb = bsum / bcnt;
printf("%.1lf", &ansa);
cout << " ";
printf("%.1lf",&ansb);
return 0;
}
输入:
100 16
现在的输出:
0.0 0.0
正确输出
56.0 50.1
有谁知道发生了什么事吗?
printf("%.1lf", &ansa);
%lf 格式说明符要求参数的类型为 double
(传递 float
也可以,因为它会被转换)。 &ansa
的类型是 double*
,这是一种不同的类型。程序的行为未定义。
我建议使用 std::cout
。在使用它时更容易不完全破坏你的程序。