高精度的题目,感觉挺有意思的,想了好一会呢,除法可以转化成乘法来进行,比如除以8,可以是乘125,再除1000.
这个题目中的例子:0.75,结果小数点后的是953125,怎么算的呢?是这样:5*125*125+7*125得到的。这样以后就很简单了。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { char s[200]; int sc[100],t[200]; while(scanf("%s",s)!=EOF) { printf("%s [8] = 0.",s); memset(sc,0,sizeof(sc)); int len=strlen(s),i,j; for(j=0,i=len-1; i>=2; i--) t[j++]=s[i]-‘0‘; len-=2; for(i=0; i<len; i++) { int c=0; sc[i]+=t[i]; for(j=0; j<=len+2; j++) { sc[j]=sc[j]*125+c; c=sc[j]/1000; sc[j]%=1000; } } for(i=len-1; i>=0; i--) printf("%03d",sc[i]); cout<<" [10]"<<endl; } return 0; }
poj 1131 Octal Fractions,布布扣,bubuko.com
原文:http://blog.csdn.net/knight_kaka/article/details/22595559