1 solutions

  • 0
    @ 2025-11-5 16:04:20

    C++ :

    #include<cstdio>
    #include<cmath>
    #include<climits>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<queue>
    using namespace std;
    
    int N,D;
    int Ans[101000]={0};
    int flag[100000][2]={0};
    
    int main()
    {
    	//freopen("fracdec.in","r",stdin);
    	//freopen("fracdec.out","w",stdout);
    	
    	memset(flag,-1,sizeof(flag));
    	
    	scanf("%d%d",&N,&D);
    	
    	int n=N,d=D;
    	int str=0,end=0;
    	
    	n=n%d;
    	while(n && Ans[0]<100000)
    	{
    		Ans[++Ans[0]]=(n*10)/d;
    		n=(n*10)%d;
    		
    		if(flag[n][0]==-1)
    		{
    			flag[n][1]=Ans[Ans[0]];
    			flag[n][0]=Ans[0];
    		} 
    		else
    		{
    			if(end==0)
    			{
    				if(flag[n][1]==Ans[Ans[0]])
    				{
    					str=flag[n][0];
    					end=Ans[0];
    				}
    			}
    		} 
    	}
    		
    	int tot=0;
    	int c=0;
    	
    	if(Ans[0]==100000)
    	{
    		printf("%d.",N/D);
    		for(int h=1;h<str;++h)	printf("%d",Ans[h]);
    		printf("(");
    		for(int h=str;h<end;++h)	printf("%d",Ans[h]);
    		printf(")");
    						
    		return 0;
    	}
    	else
    	{
    		if(N%D==0) 
    		{
    			printf("%d.0",N/D);
    		}
    		else
    		{
    			printf("%d.",N/D);
    			for(int i=1;i<=Ans[0];++i)
    			{
    				printf("%d",Ans[i]);
    			}
    		}
    	
    	}
    	
    	//fclose(stdin);
    	//fclose(stdout);
    
    	return 0;
    }
    

    Python :

    # coding=utf-8
    # 辗转相除法求最大公约数
    def gcd(a, b):
        return a if b == 0 else gcd(b, a % b)
    
    # 获取小数部分和循环节
    def get_decimal(numerator, denominator):
        remainder = numerator % denominator
        quotient = numerator // denominator
        decimal = str(quotient) + '.'
        remainder_map = {}
        i = len(decimal)
        while remainder != 0 and remainder not in remainder_map:
            remainder_map[remainder] = i
            i += 1
            quotient, remainder = divmod(remainder * 10, denominator)
            decimal += str(quotient)
        if remainder == 0:
            return decimal
        else:
            repeat_start = remainder_map[remainder]
            return decimal[:repeat_start] + '(' + decimal[repeat_start:] + ')'
    
    # 主程序
    numerator, denominator = map(int, input().split())
    if numerator % denominator == 0:  # 整除的情况
        print(str(numerator // denominator) + '.0')
    else:
        common_divisor = gcd(numerator, denominator)
        numerator //= common_divisor
        denominator //= common_divisor
        print(get_decimal(numerator, denominator))
    
    • 1

    Information

    ID
    17480
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By