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;
}
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;
}
相关文章推荐
- ACM Hrbeu OJ 1001 Forests || POJ 2419
- POJ 1001 解题报告 Exponentiation
- POJ1001 -- A-B Problem
- POJ 1001 解题分析
- 《POJ 1001》 Exponentiation
- POJ 1001 Exponentiation
- POJ1001-Precision power
- POJ 1001 Exponentiation
- POJ 1001
- poj 1001 Exponentiation(高精度运算)
- [POJ] 1001 -> 求高精度幂
- ACM: 高精度运算 poj 1001 首次jav…
- poj1001(高精度【乘法】)
- POJ 1001 Exponentiation 无限大数的指数乘法 题解
- 求高精度幂【POJ 1001】【编程】
- POJ 1001(高精度乘法)
- POJ#1001
- POJ 1001 Exponentitaion
- poj1001 Exponentiation
- POJ 1001