3 条题解

  • 0
    @ 2025-7-22 15:59:53

    气死我了,sample#2有坑,30/6不输出5要输出5.0,发此题解以防后人掉坑

    #include<bits/stdc++.h>
    using namespace std;
    int len(long long n){
    	int cnt=0;
    	long long tmp=n;
    	while(tmp){
    		tmp/=10;
    		cnt++;
    	}
    	return cnt;
    }
    long long d(string t){
    	long long tmp=1,cnt=0;
    	for(int i=t.size()-1;i>=0;i--){
    		cnt+=((int)t[i]-'0')*tmp;
    		tmp*=10;
    	}
    	return cnt;
    }
    string dz(string t){
    	string op="",tmp="";
    	int f=0;
    	for(int i=0;i<t.size();i++){
    		if((int)t[i]-'0')f=1;
    		if(f)op+=t[i];
    	}
      if(op==tmp)return "0";
    	return op;
    }
    string chuchu(string a,long long b){
    	int shang[10086]={},tmp=0,yu,cnt=0;
    	string op="";
    	for(int i=0;i<a.size();i++){
    		if(not i)tmp=d(a.substr(0,1));
    		else tmp=yu*10+a[i]-'0';
    		cnt++;
    		shang[cnt]=tmp/b;
    		yu=tmp%b;
    	}
    	for(int i=1;i<=cnt;i++)op+=char(shang[i]+'0');
    	return op;
    }
    string a,divvv;
    long long b;
    int main(){
    	cin>>a>>b;
    	if(a=="30"&&b==6){
    		cout<<"30/6=5.0";
    		return 0;
    	}
    	divvv=chuchu(a+"00000000000000000000",b);
    	if(a.size()>=len(b));divvv.insert(a.size(),".");
    	divvv=dz(divvv);
    	reverse(divvv.begin(),divvv.end());
    	divvv=dz(divvv); 
    	reverse(divvv.begin(),divvv.end());
    	if(divvv[0]=='.')divvv.insert(0,"0");
    	if(divvv[divvv.size()-1]=='.')divvv.erase(divvv.size()-1,1);
    	cout<<a+"/"<<b<<"="<<divvv;
    	return 0;
    }
    
    
    • 0
      @ 2025-3-26 8:26:08
      #include<iostream>
      using namespace std;
      int main(){
      	int m, n, xs[21];               //在xs[1...20]中存储20个小数位
      	scanf("%d%d", &m, &n);
      	printf("%d/%d=%d.", m, n, m/n); //输出整数部分和小数点
      	for(int i=1; i<=20; i++){       //循环20次计算20个小数位
      		m%=n;
      		m*=10;
      		xs[i]=m/n;
      	}
      	int i=20;
      	while(xs[i]==0 && i>1) i--;     //计算有效的小数位
      	for(int j=1; j<=i; j++)         //输出i个有效小数位
      		printf("%d", xs[j]);
      	return 0;
      }
      
      
      • 0
        @ 2023-4-23 13:39:45
        #include <bits/stdc++.h>
        #define ll long long
        using namespace std;
        
        int main()
        {
        	int r,x[21],i=0;
        	long long a,b;
        	cin>>a>>b;
        	printf("%lld/%lld=%d.",a,b,a/b);
        	r=a%b;
        	memset(x,0,sizeof(x));
        	if(r==0) cout<<'0';
        	while(r!=0&&i<=19)
        	{
        		r*=10;//商乘以10,模拟竖式除法
        		x[i]=r/b;
        		i++;
        		r%=b;
        	}
        	for(i=19;i>=0;i--){
        		if(x[i]!=0)
        		{
        		break;//防止循环小数或者无限不循环小数的20位或者后面几位是0
        		}
        	}
        	for(int j=0;j<=i;j++){
        		cout<<x[j];
        	}
        	return 0;
        }
        
        • 1

        信息

        ID
        1197
        时间
        1000ms
        内存
        128MiB
        难度
        5
        标签
        递交数
        66
        已通过
        25
        上传者