可以帮我看看哪里有问题吗,测试出来的结果都是对的。
题目描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个 0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第n 位开始的 3 位数。
输入描述
输入一行三个整数:a b n,用空格分开。a 是被除数,b 是除数,n 是所求的小数后位置(0
输出描述
输出一行 3 位数字,表示:a 除以 b,小数后第 n 位开始的 3 位数字。
输入输出样例
示例
输入:
1 8 1
输出:
125
我的代码如下
import java.util.Scanner;
import java.lang.Math.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double a,b,n;
a=scan.nextDouble();
b=scan.nextDouble();
n=scan.nextDouble();
//System.out.println(a/b);
//System.out.println((a/b)*Math.pow(10.0,n+2));
//System.out.println(1000*(int)((a/b)*Math.pow(10.0,n-1)));
double temp=(a/b)*Math.pow(10.0,n+2)-1000*(int)((a/b)*Math.pow(10.0,n-1));
System.out.println((int)temp);
scan.close();
}
}
如果是 有限小数的情况, 比如如下场景就不对了,你需要考虑这个场景:
参考如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a, b, n;
a = scan.nextInt();
b = scan.nextInt();
n = scan.nextInt();
int t = a % b;
for (int i = 1; i < n + 3; i++) {
if (i >= n) {
System.out.print(t * 10 / b);
}
t = t * 10 % b;
}
scan.close();
}
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您的代码看起来没有问题,对于给定的输入,输出也符合要求。总体上,您的程序实现了题目所要求的功能,计算了小数点后第 n 位开始的 3 位数字。
不过,我有几个小建议:
建议将变量 a、b、n 声明为整型,因为输入的是整数,转换为浮点数可能会损失精度。
建议使用 Scanner 的 nextInt() 方法读取整型输入,而不是 nextDouble() 方法,因为 nextDouble() 方法可能无法正确处理整数输入。
建议在 Scanner 使用完毕后及时关闭,以释放资源,避免内存泄漏。
建议在数学计算中使用常量,而不是硬编码的数字,以提高代码的可读性和可维护性。比如,可以定义一个常量 DIGITS = 3,表示需要输出的数字位数。
下面是按照上述建议修改后的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int n = scan.nextInt();
int digits = 3;
int temp = (int) ((a * 1000L / b % 1000) * Math.pow(10, n - digits) % 1000);
System.out.println(String.format("%03d", temp));
scan.close();
}
}
这里使用了 long 类型的除法,避免了整数溢出的问题。注意在输出前使用 String.format() 方法来格式化输出,确保输出的数字是 3 位。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
题目不是已经说了吗?一行三个数字,空格隔开,你还接受三个输入怎么对
解题思路:
(1)把A柱子上的前N-1个盘子借助C柱子,全部移动到B柱子上(过程暂不考虑),再把第N个盘子由A柱子移动到C柱子上,那么剩下要移动的盘子在B柱子上了。
(2)把B柱子上的前N-2个盘子借助C柱子,全部移动到A柱子上(过程暂不考虑),再把第N-1个盘子由B柱子移动到C柱子上。
(3)重复上面的两个步骤即可把A柱子上的盘子全部移动到C柱子上。
#include <stdio.h>
void loveyou(int n, char start, char help, char end)
{
if (n >= 2)
{
loveyou(n - 1, start, end, help);
printf("%c------>%c\n", start, end);
loveyou(n - 1, help, start, end);
}
else if (n == 1)
{
printf("%c------>%c\n", start, end);
}
}
int main(void)
{
int n = 0;
printf("输入圆盘的数量:");
scanf("%d", &n);
loveyou(n, 'A', 'B', 'C');
return 0;
}