算法竞赛入门经典(分数化小数)
16lz
2021-01-22
学习计算机专业有很久了,之前一直看看开源的框架,刷刷Leetcode,想着还是踏踏实实看一些基础的书,就选择了《算法竞赛入门经典》,因为不是要去搞什么ACM(感觉自己智商不够用!),所以就用最熟悉的Java去实现代码。书中思想还是很有帮助的!给自己一个加油!书中习题2-5 ,题目如下:
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10 6 ,c≤100。输入包含多组数据,结束标记为a=b=c=0。
样例输入:
1 6 4
0 0 0
样例输出:Case 1: 0.1667
我在网上看到一些代码,但是存在一些BUG,下面给出完整代码!思想就是用数组来存储小数部分的每一位!注意保留位数的时候就行四舍五入!可能有连续进位的情况!
import java.util.Scanner;
public class Decimal {
public static void main(String[]args){
int a,b,c;
Scanner in = new Scanner(System.in);
while(in.hasNext()){
a = in.nextInt();
b = in.nextInt();
c = in.nextInt();
if(a==0&&b==0&&c==0) break;
int[]decimal = new int[101];
int count = 0;
int integer = a/b;
int remain = a%b;
while(count<=c){
remain*=10;
decimal[count] = remain/b;
remain%=b;
count++;
}
count--;
boolean isAdd = false;
if(decimal[count]>=5){
isAdd = true;
}
for(int i=count;i>=1;i--){
if(isAdd){
decimal[i-1]++;
if(decimal[i-1]==10){
decimal[i-1] = 0;
isAdd = true;
}else{
isAdd = false;
break;
}
}else{
break;
}
}
if(isAdd){
integer++;
}
String result = ""+integer+".";
for(int i=0;i<c;i++){
result+=decimal[i];
}
System.out.println(result);
}
}
}
更多相关文章
- 求一段与读取数据库数据,写入一个数组的javascript 代码!谢谢!!
- java动态编译 (java在线执行代码后端实现原理)
- java SSH员工管理系统以及Demo代码下载
- JavaScript 面向对象编程,严格过程的标准化编程法,目前为止最好的
- 8/人天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已完整
- Java借助Runtime调用外部程序阻塞的代码
- Spring SpEL系列二 @Value,xml, Java代码使用SpEL