| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
结果如果是0,输出0.000,与输出0.都对,本人测试过了,数组100足够用了#include<iostream>
#include<string>
将8进制化为2进制,因为
0.1111[2]=0.5+0.25+0.125+0.625+……,
算式如下:
5
+25
+125
+ 625
……
0.1001[2]=0.5+0.625
5
+(此处只算不加)
+(同上)
+ 625
————
.5625
2进制要是1就加,是0就不用加
就是结果每次都错位
using namespace std;
int a[8][3]={0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1};
int main()
{
int b[100],ji[100][100],res[100],tem[100];
char c[100];
int leng,j,i,k,m,max,t;
memset(ji,0,sizeof(ji));
//freopen("2.txt","r",stdin);
while(scanf("%s",c)!=EOF)
{
memset(res,0,sizeof(res));
memset(tem,0,sizeof(tem));
i=0;
while(c[i++]!='.');
leng=(strlen(c)-i)*3;
for(j=0;j<leng;i++)//转换为2进制。
{
t=c[i]-'0';
b[j++]=a[t][0];
b[j++]=a[t][1];
b[j++]=a[t][2];
}
ji[0][0]=1;
max=0;
for(i=0;i<j;i++)
{
t=i+1;
if(max>=i)
{
for(k=0;k<=i;k++)
{
ji[t][k]=ji[i][k]*5;
}
for(k=0;k<=i;k++)
{
if(ji[t][k]>9)
{
ji[t][k+1]+=ji[t][k]/10;
ji[t][k]=ji[t][k]%10;
}
}
max++;
}
if(b[i])
{
tem[0]=ji[t][0];
if(i)
k=1;
else
k=0;
for(m=0;m<=i;m++,k++)
{
tem[k]=ji[t][k]+res[m];
if(tem[k]>9)
{
res[k]+=tem[k]/10;
tem[k]=tem[k]%10;
}
}
for(k=0;k<=i+1;k++)
{
res[k]=tem[k];
}
}
else
{
for(k=i+2;k>0;k--)
res[k]=res[k-1];
res[0]=0;
}
}
m=i;
printf("%s [%d] = ",c,8);
j=0;
while(!res[j++]&&j<=i);j=j-1;
// if(j==i)
// j=j-1;
if(leng>=i+1)
{
printf("0.");
while(leng>i+1)
{printf("0");i++;}
for(;m>=j;m--)
{
printf("%d",res[m]);
}
}
else
{
while(m>=leng)
printf("%d",res[m--]);
printf(".");
if(res[j-1]=='.')
printf("0");
while(m>=j)
printf("%d",res[m--]);
}
printf(" [%d] \n",10);
}
return 0;
}
小弟刚开始做,没啥技术含量,希望大虾们不要见笑。
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator