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;
    }
    
    

    信息

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