#include<stdio.h>
#include<math.h>
double x_pow(double x,int n){
int i,x_pow = 1;
for(i = 1;i <= n;i++){
x_pow *= x;
}
return x_pow;
}
int fact(int n){
int sum = 1,i;
if(n == 0||n == 1) return 1;
for(i = 1;i <= n;i++){
sum *= i;
}
return sum;
}
void x_sin(double x){
int sign = 1,k = 1,count = 0;
double sin = 0;
double single_value = 0;
do{
single_value = x_pow(x,k)/fact(k);
sin += sign*single_value;
k += 2;
sign = -sign;
count++;
}while(single_value >= x_pow(0.1,5));
printf("%.3lf\n%d",sin,count);
}
int main(){
double x;
scanf("%lf",&x);
x_sin(x);
return 0;
}
求 fac 溢出了,改成 long long 计算
该问题可能由于类型限制造成,将除数、被除数都转换成浮点型可以解决该问题。
修改程序的代码实现如下:
//将两个数转换为浮点型 double a = 3.0; double b = arr[idx]; double result = a / b;
//输出时转换为正数 cout << abs(result) << endl;