小蒜想知道:分数 a/b 化为小数后,小数点后第 n 位的数字是多少?
输入格式
三个正整数 a,b,n,相邻两个数之间用单个空格隔开。0 < a < b < 100,1≤n≤10000。
输出格式
一个数字。
样例输入 复制
1 2 1
样例输出 复制
5
这道题我自己通过double类型求出小数点后的小数,再找出小数点后要求的数,但是double类型的数据有限,这道题上的n最大范围是10000,我这种方法显得就不行了,之后有借鉴了别人的方法,将余数求出来,再放大然后再求余数,直到找到需要求得小数点位数后停止,就很好的避免了数据过大的问题了。接下来第一段代码是我自己写的代码(针对本题错误,代码没错),第二段代码是我借鉴别人的代码修改的(正确的)。
import java.util.Scanner;
/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年7月22日 上午9:50:20
* 类说明
*/
public class 求小数的某一位 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int n = sc.nextInt();
double c = (double)a/b%1;
String str = String.valueOf(c);
String st = str.substring(2);
int len = st.length();
if(n>len)
System.out.println(0);
else
System.out.println(st.substring(n-1, n));
}
}
这段代码既可以处理小数据求小数点位数,也可以求小数点。
import java.util.Scanner;
/**
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年7月22日 下午2:27:14
* 类说明
*/
public class 求小数的某一位1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int n = sc.nextInt();
for(int i=1;i<=n;i++)
{
a%=b;
a*=10;
}
a = a/b;
System.out.println(a);
}
}
这段代码针对本题完全正确,而且可以处理大数据的求小数点某位数。