|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
输入整数a,b,n
,计算a/b
的值,并输出其小数点后第n
位的数字是多少。
输入描述
输入三个整数a,b,n
(0<a<b<100
,1≤n≤10000
)。
输出描述
计算a/b的值,并输出其小数点后第n位的数字是多少。
- #include<stdio.h>
- int main()
- {
- int a,b,n,c=1;
- scanf("%d%d%d",&a,&b,&n);
- for(int i=1;i<=n;i++)
- {
- c=c*10;
- }
- int s=a*c/b;
- printf("%d\n",s%10);
- }
复制代码
代码中的问题在于计算 a/b 的值时,使用了整数相除的方式,并将结果乘以 10^n 后取整数部分作为 s 的值。这样做可能导致精度丢失,并不能正确得到小数点后第 n 位的数字。
要解决这个问题,可以改为使用浮点数相除的方式进行计算,并将结果乘以 10^n,然后对结果取整数部分。以下是修改后的代码:
- #include<stdio.h>
- int main() {
- int a, b, n;
- scanf("%d%d%d", &a, &b, &n);
-
- double result = (double) a / b; // 使用浮点数相除
- int s = result * pow(10, n); // 将结果乘以 10^n
-
- printf("%d\n", s % 10);
-
- return 0;
- }
复制代码
请注意,修改后的代码中使用了 <math.h> 头文件中的 pow() 函数来计算 10^n 的值。因此,需要添加 #include<math.h> 来包含该头文件。
请注意,本回答来自GPT-3.5
如果问题已经解决,请设置最佳答案
|
|