[编程题]a/b
  • 热度指数:4585 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
求 a/b 的小数表现形式。如果 a 可以整除 b 则不需要小数点。如果是有限小数,则可以直接输出。如果是无限循环小数,则需要把小数循环的部分用"()"括起来。

数据范围:

输入描述:
两个整数a和b,其中

0 <= a <= 1000 000

1 <= b <= 10 000


输出描述:
一个字符串,该分数的小数表现形式
示例1

输入

10 1

输出

10

说明

10/1 = 10 
示例2

输入

1 2

输出

0.5

说明

1/2 = 0.5 
示例3

输入

1 3

输出

0.(3)

说明

1/3 = 0.333333... 
示例4

输入

1 6

输出

0.1(6)

说明

1/6 = 0.16666666.... 
示例5

输入

1 7

输出

0.(142857)

说明

1 / 7 = 0.1428571428... 
import java.util.*;
public class Print_cycle {
        public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            int a = scan.nextInt();
            int b = scan.nextInt();
            if(a%b ==0){
                System.out.println(""+a/b);             //若为整数,则直接输出
            }else{
                int c = a;
                ArrayList<Integer> xiaoshu = new ArrayList<Integer>();        //记录各位小数
                HashMap<Integer,Integer> pos = new HashMap<Integer,Integer>();    //HashMap用于寻找重复位置
                int looppos = -1;
                c=c%b;
                while(c!=0){
                    if(pos.containsKey(c))
                    {
                        looppos = pos.get(c);          //若重复,则寻找之前的位置并跳出循环
                        break;
                    }else{
                        xiaoshu.add(c*10/b);                //计算一位小数,并将其放入arraylist
                        pos.put(c,pos.size());         //将小数对应位置进行记录
                    }
                    c=c*10%b;
                }
                if(looppos==(-1)){
                    System.out.print(a/b);
                    System.out.print('.');
                    for(int i:xiaoshu){
                        System.out.print(i);
                    }
                }else{
                    System.out.print(a/b);
                    System.out.print('.');
                    for(int j=0;j<looppos;j++){
                        System.out.print(xiaoshu.get(j));
                    }
                    System.out.print('(');
                    for(int k=looppos;k<xiaoshu.size();k++){
                        System.out.print(xiaoshu.get(k));
                    }
                    System.out.print(')');
                }
                
            }
        }
    }
发表于 2019-03-17 13:09:05 回复(0)