首页 > 编程知识 正文

必备小数化分数,小数化分数的计算题

时间:2023-05-03 14:39:26 阅读:224659 作者:4607

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。