Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Floating-Point Numbers"
https://onlinejudge.u-aizu.ac.jp/problems/1628
・浮動小数点数
僕が作成、提出したコードは、以下のとおりです。
・Aizu Online Judge in C++ #Volume16 : 1628 - Floating-Point Numbers
/* Aizu Online Judge in C++ #Volume16 : 1628 - Floating-Point Numbers https://onlinejudge.u-aizu.ac.jp/problems/1628 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n,k; void f(ll a,ll b){ string s(b,'0'); for(ll i=b;i--;){ s[i]=a%2+'0'; a/=2; } cout<<s; } int main(void){ while(cin>>n,n){ { string s;cin>>s; k=1; for(ll i=0;i<52;i++){ k=k*2+s[i]-'0'; } } n--; ll a=1,c=k; while(n>0){ ll num=k>>a; if(num==0){ break; } ll x=((1LL<<53)-c-1)/num+1; if(x>n){ x=n; } c+=x*num; if(c>=(1LL<<53)){ c>>=1; a++; } n-=x; } f(a,12); f(c,52); puts(""); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/