//============================================================================
// Name : 1003.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
typedef unsigned int uint;
class Devide {
private:
uint index[4];
static const uint X = 1 << 22;
public:
Devide() {
}
void init(const int& n) {
index[0] = 0;
index[1] = X / n;
uint mod = (X % n) << 22;
index[2] = mod / n;
mod = (mod % n) << 22;
index[3] = mod / n;
}
void init(const int& a, const int& b, const int& n) {
index[0] = a;
int x = b << 22;
index[1] = x / n;
uint mod = (x % n) << 22;
index[2] = mod / n;
mod = (mod % n) << 22;
index[3] = mod / n;
}
void add(const Devide a, const Devide& b) {
uint last = 0;
for (int i = 3; i >= 0; i--) {
uint sum = a.index[i] + b.index[i] + last;
index[i] = sum % X;
last = sum / X;
}
}
bool biggerThan(const Devide& other) {
for (int i = 0; i < 4; i++) {
if (index[i] > other.index[i]) {
return true;
} else if (index[i] < other.index[i]) {
return false;
}
}
return true;
}
void print() const {
for (int i = 0; i < 4; i++)
cout << uppercase << hex << static_cast<int>(index[i]) << endl;
}
};
int main() {
int result[521];
Devide dd[521];
int j = 2;
Devide sum, next;
sum.init(j);
for (int i = 1; i < 521; i++) {
dd[i].init(i / 100, i % 100, 100);
while (!sum.biggerThan(dd[i])) {
j++;
next.init(j);
sum.add(sum, next);
}
result[i] = j - 1;
}
float f;
while (1) {
cin >> f;
int index = (int) (f * 100 + 0.5f);
if (index == 0) {
break;
} else {
cout << result[index] <<" card(s)" << endl;
}
}
return 0;
}
poj1003
最新推荐文章于 2019-10-07 21:53:36 发布