| ||||||||||
| 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 | |||||||||
写了好久,一个H2O#include <iostream>
#include <vector>
#include <string>
using namespace std;
class tiaosao{
public:
vector<int> data;
int len;
tiaosao(int num){
len = 1;
//data = new int[len];
data.push_back(num);
}
tiaosao(int num, bool tag){
len = num;
for(int i = 0; i < len; i++) data.push_back(0);
}
void print(){
for(int i = len-1; i >= 0; i--) {
cout << data[i] << " ";
}
}
void normalize(){
for(int i = 0; i < len-1; i++){
data[i+1] += data[i]/10;
data[i] %= 10;
}
while(data[len-1] >= 10){
data.push_back(data[len-1]/10);
data[len-1] %= 10;
len ++;
}
}
void cheng8();
void addNum(int);
};
void tiaosao::cheng8(){
for(int i = 0; i < len; i++){
data[i] *= 8;
}
for(int i = 0; i < len-1; i++){
data[i+1] += data[i]/10;
data[i]%=10;
}
if(data[len-1] >= 10){
data.push_back(data[len-1]/10);
data[len-1] %= 10;
len ++;
}
}
void tiaosao::addNum(int num){
data[0] += num;
for(int i = 0; i < len-1; i++){
if(data[i] < 10) break;
data[i+1] += data[i]/10;
data[i]%=10;
}
if(data[len-1] >= 10){
//cout << "*" << endl;
data.push_back(data[len-1]/10);
data[len-1] %= 10;
len ++;
}
}
tiaosao multiply(tiaosao t1, tiaosao t2){
int len = t1.len + t2.len;
tiaosao res(len, true);
for(int i = 0; i < len - 1; i++){
for(int j = 0; j <= i; j++){
if(j < t1.len && i-j < t2.len){
res.data[i] += t1.data[j] * t2.data[i-j];
}
}
}
for(int i = 0; i < len-1; i++){
res.data[i+1] += res.data[i]/10;
res.data[i] %= 10;
}
return res;
}
tiaosao pw(tiaosao t, int m){
if(m == 1) {
//cout << t.len << endl;
tiaosao res(t.data[0]);
return res;
}
tiaosao temp = pw(t, m/2);
if(m%2 == 0) return multiply(temp, temp);
else return multiply(t, multiply(temp, temp));
}
int main() {
string s;
while(cin >> s){
if(s.length() == 1){
if(s[0] == '0') cout << "0 [8] = 0 [10]" << endl;
else cout << "1 [8] = 1 [10]" << endl;
continue;
}
int len = s.length();
vector<int> digits;
for(int i = 2; i < len; i++){
digits.push_back(s[i] - '0');
}
tiaosao t(digits[0]);
for(int i = 1; i < len-2; i++){
//cout << digits[i] << endl;
t.cheng8();
//t.print();
//cout << endl;
t.addNum(digits[i]);
//t.print();
//cout << endl;
}
//cout << endl;
tiaosao five(5);
tiaosao mf = pw(five, 3*(len-2));
tiaosao res = multiply(mf, t);
//t.print();
//cout << endl;
//mf.print();
//cout << endl;
res.normalize();
//res.print();
//cout << endl;
//cout << res.len << endl;
cout << s << " [8] = 0.";
if(res.len < 3*(len-2)){
for(int i = 0; i < 3*(len-2)-res.len; i++) cout << 0;
}
int Len = res.len;
if(Len > 3*(len-2)) Len = 3*(len-2);
for(int i = 0; i < Len; i++) cout << res.data[Len-1-i];
cout << " [10]\n";
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator