高精度的题目,感觉挺有意思的,想了好一会呢,除法可以转化成乘法来进行,比如除以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;
}