成长轨迹43 【ACM算法之路 百炼poj.grids.cn】【数值转换】【2765:八进制小数】

题目
http://poj.grids.cn/practice/2765

 

【注意】
%g可以自动删去末尾的0~
而且,%g会以%f%e中较短的输出宽度输出单、双精度实数

【wa代码】
//一开始wa的代码。。。

//好吧我没看到这句话wa的:
//“……输出的小数末尾不能有0,也就是说Dm不等于0。”

#include<stdio.h>
#include<string.h>

int main()
{
while(1)
{
char n[20];
if(scanf("%s",n)==EOF)
break;
int len = strlen(n);
double n10=0;
for(int i=len-1;n[i]!='.';i--)
{
n10/=double(8.0);
n10+=double(n[i]-'0');
}
n10/=double(8.0);// .那位少除了一次

for(int i=0;i<len;i++)
printf("%c",n[i]);
switch((len-2)*3)
{
case 3:
{
printf(" [8] = %.3lf [10]\n",n10);
break;
}
case 6:
{
printf(" [8] = %.6lf [10]\n",n10);
break;
}

case 9:
{
printf(" [8] = %.9lf [10]\n",n10);
break;
}
case 12:
{
printf(" [8] = %.12lf [10]\n",n10);
break;
}
case 15:
{
printf(" [8] = %.15lf [10]\n",n10);
break;
}
case 18:
{
printf(" [8] = %.18lf [10]\n",n10);
break;
}
case 21:
{
printf(" [8] = %.21lf [10]\n",n10);
break;
}
case 24:
{
printf(" [8] = %.24lf [10]\n",n10);
break;
}
default:
{
printf(" [8] = %f [10]\n",n10);
break;
}
}

}
return 0;
}

 

//%g可以自动删去末尾的0~
//而且,%g会以%f%e中较短的输出宽度输出单、双精度实数
【ac代码】

#include<stdio.h>
#include<string.h>


int main()
{
while(1)
{
char n[20];
if(scanf("%s",n)==EOF)
break;
int len = strlen(n);
double n10=0;
for(int i=len-1;n[i]!='.';i--)
{
n10/=double(8.0);
n10+=double(n[i]-'0');
}
n10/=double(8.0);// .那位少除了一次

for(int i=0;i<len;i++)
printf("%c",n[i]);
printf(" [8] = %.45g [10]\n",n10);

}
return 0;
}



posted @ 2012-02-09 23:22  MooreZHENG  阅读(454)  评论(0编辑  收藏  举报