学习计算机专业有很久了,之前一直看看开源的框架,刷刷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);
}
}
}