给定正整数n,求(1/2)*(2/2)*(3/2)*…*(n/2)。(注:本题已提供一部分起始代码,请根据题意补充完整即可;无需任何输出结果。)
int n = 100; // 给定的正整数
int result; // 最终结果写入该变量
(需要补充)
#include <stdio.h>
int main(){
int n = 100;
float result = 1;
for (int i = 1; i < n; i++){
result *= ((float)i / 2);
}
printf("%lf", result);
}
int result是不对的。因为结果是浮点数.当int作为被除数时,如1/2 得到的结果是0
#include <stdio.h>
int main(){
int n = 100;
int result = 1;
for (int i = 1; i < n; i++){
result *= (i / 2);
}
printf("%lf", result);
}
楼上两个都不考虑下n=100的情况。。
#include <stdio.h>
int main(){
int n = 100;
float result = 1;//这里需要使用float,不然结果是错的,到后面的时候如果需要再转成int
for (int i = 1; i <= n; i++){
result *= (i / 2.0); //这里要除以2.0,结果才是float,不然1/2会等于0而不是0.5
}
printf("%lf", result);
//
int res=(int)float;//这里转成整数
}
include <stido.h>
float calc(int n){
float result = 1;
if(n <=0){
printf("n must be large than 0!\n");
return -1;
}
for(int i = 0; i < n; i++){
result *= (float)i/2;
}
return result;
}
int main(){
int n = 100;
float result = 0;
result = calc(n);
if(result < 0){
printf("the result error!\n");
}else{
printf("the result is %f\n", result);
}
}
注意:
1.代码中的打印要尽可能的清晰不要听打印结果一个数字。
2.尽可能的把一个功能写成一个函数,这样才能重复调用。
3.代码要对非法的结果做出保护,如n <=0的情况要返回错误。
如果对你有帮助欢迎关注我的博客,我会持续发布技术文档。
#include <stdio.h>
int main(){
int n = 100;
int result;
float res = function(n)
int res=(int)res;//这里转成整数
}
// 迭代法计算n/2的乘积
float function(int n){
if(n < 1){
return 0.0;
}
return (n/2.0)*function(n-1);
}
每次运算都除2会导致很大的精度丢失,实际的值是算n!/2^n,即n的阶乘除2的n次幂。13!=6,227,020,800,都已经超int范围了。不过在想想,肯定不是要算这么高难度的问题了。正常解题一个for循环就可以了