看程序太累了。。只好贴我的AC代码,希望对你有所帮助。这题很恶心,很多细节处理,我当时也是调了很久才过的。
#include
#include
using namespace std;
int min(int a,int b){return avoid multiply(int *a,int *b,int *c,int la,int lb,int &lc)
{
int i,j,tmp;
for (i=0;i
tmp=0;
for (j=0;j {
c[i+j]+=a[i]*b[j]+tmp;
tmp=c[i+j]/10000;
c[i+j]=c[i+j]%10000;
}
if (tmp>0&&i+lb<125)
{
c[i+lb]+=tmp;
}
}
lc=min(125,la+lb+2);
while (c[lc-1]==0&&lc>0) lc--;
}
int main()
{
char s[10];
int binary[100],ans[100],tmp[100],la,lb,lt;
int n,dot,i,j,count,r;
bool div;
while (cin.getline(s,10))
{
memset(binary,0,sizeof(0));
memset(ans,0,sizeof(0));
la=0;lb=0;
r=0;
for (i=0;i<6;i++)
{
if (s[i]=='.')
dot=5-i;
else
{
r*=10;
r+=s[i]-'0';
}
}
while (r%10==0&&dot>0)
{
r/=10;
dot--;
}
n=atoi(s+7);
dot*=n;
if (r<10000)
{
binary[0]=r;
lb=1;
}
else
{
binary[0]=r%10000;
binary[1]=r/10000;
lb=2;
}
ans[0]=1;
la=1;
while (n>0)
{
div=n%2;
n/=2;
if (div)
{
memset(tmp,0,sizeof(tmp));
multiply(binary,ans,tmp,lb,la,lt);
for (i=0;i
}
memset(tmp,0,sizeof(tmp));
multiply(binary,binary,tmp,lb,lb,lt);
for (i=0;i
}
if (dot==0)
{
cout<
{
j=1000;
while (j>0)
{
cout<
}
}
}
else
if ((la-1)*4>dot)
{
cout<
for (i=la-2;i>=0;i--)
{
j=1000;
while (j>0)
{
cout<
count++;
if (count+dot==(la-1)*4) cout<<'.';
}
}
}
else
if ((la-1)*4<=dot&&la*4>dot)
{
dot-=(la-1)*4;
j=1000;
count=0;
while (j>0)
{
if (ans[la-1]/j>0) cout<
count++;
if (count+dot==4) cout<<'.';
}
for (i=la-2;i>=0;i--)
{
j=1000;
while (j>0)
{
cout<
}
}
}
else
if (dot>=la*4)
{
cout<<'.';
for (i=0;i
for (i=la-1;i>=0;i--)
{
j=1000;
while (j>0)
{
cout<
}
}
}
cout<
return 0;
}
这样子贴个程序出来怎么看啊~~高精度加乘法,这么基础的程序好好写啦。
不会是病毒吧