设为首页 加入收藏

TOP

算法竞赛入门经典(分数化小数)
2019-05-12 00:30:47 】 浏览:60
Tags:算法 竞赛 入门 经典 分数 小数

学习计算机专业有很久了,之前一直看看开源的框架,刷刷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);
        }
    }
}
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇程序员生存定律--成长路上常见的坑 下一篇SQL语句

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目