3 条题解
-
0
气死我了,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
#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
#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
- 上传者