您的位置:首页 > 其它

POJ 1001

2014-09-18 00:38 148 查看
用数组模拟手算,最后把小数点加进去,要注意去掉前面的0和后面的0对小数点位置的影响。

AC的代码

/*
Memory 280K
Code Length 1603B
Time 0MS
*/
#include <iostream>
#include <string>
using namespace std;

int main()
{
string s;
int num;
int dot = 0;
int mul[20];
int r[151];
memset(r,0,151*sizeof(int));
int result[151];
memset(result,0,151*sizeof(int));
int i,j,k,l,m,n;
int over = 0;
while(cin>>s>>num)
{
dot = 0;
memset(r,0,151*sizeof(int));
memset(result,0,151*sizeof(int));
//s->mul,r
j = 0;
for(i = 0;i < s.length();i ++)
{
if(s.at(s.length() - i - 1) != '.')
{
mul[j] = (int)s.at(s.length() - i - 1) - 48;
r[j] = mul[j];
j++;
}
else
dot = i;
}
k = j;
dot *= num;
while(--num != 0)
{

//result += mul * r
for(i = 0;i < j;i ++)
{
n = i;
over = 0;
for(l = 0;l < k;l++)
{
m = mul[i] * r[l];
result
+= m + over;
if(result
> 9)
{
over = result
/ 10;
result
= result
% 10;

}
else
over = 0;
n ++;
}
if(over != 0)
result
= over;
else
n--;
}
for(i = 0;i <= n;i ++)
r[i] = result[i];
memset(result,0,151*sizeof(int));
k = n + 1;
}
//delete last 0s
int flag = 0;
int end = -1;

for(i = 0;i < k;i ++)
{
if(i == dot)
break;
if(r[i] == 0)
end++;
else
break;
}

for(i = k - 1;i > end;i --)
{
if(i == dot - 1 && dot != 0)
{
cout<<".";
flag = 1;
}
if(r[i] == 0 && flag == 0) //delete first 0s
continue;
else
flag = 1;

cout<<r[i];
}
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: