[回复]
[修改] [删除]
[返回版面]
|
1 |
作者: admin, 讨论版: 算法集锦, 发表时间: 2013-12-24 17:31:52 PST
标题: 不用数字7的国家
关键字:
一个特殊的国家忌讳7这个数字,所有包含7的数字他们都不用,改用下一个数字,
比如7他们用8代替,17用19代替,给定这个国家的数字,翻译成我们用的数字。
思路:
这是一个9进制度数字系统. 0-6和十进制相同, 8和9相当于十进制的7和8.
因此转换非常直接:
如果数字是d1d2d3...dn, 则转换为:
D1 * 9^(n-1) + D2 * 9^(n-2) + .. + Dn * 9^0,
这里如果di = 0-6, 那么Di = di,
如果di = 8 or 9, 那么Di = di - 1.
代码如下, 见函数convert_back().
// return true if x contains digit 7.
bool contains7(int x) {
while (x > 0) {
int y = x % 10;
if (y == 7) return true;
x /= 10;
}
return false;
}
void getX(int & x) {
do {
++ x;
} while (contains7(x));
}
// convert new number system number back to normal number.
int convert_back(int x) {
int v = 0;
int base = 1;
while (x > 0) {
int y = x % 10;
if (y == 8 || y == 9) y -= 1;
v += y * base;
base *= 9;
x /= 10;
}
return v;
}
int main() {
int x = 0; // new number system number that ignores 7.
for (int i = 1; i < 1000; ++ i) {
getX(x);
string result = (i == convert_back(x) ? "ok" : "err");
cout << i << "=> " << x << " " << result << "\t";
if (result == "err") break;
if (i % 5 == 0) cout << endl;
}
cout << endl;
return 0;
}
(本文来自homecox.com)
--
最后修改: admin on 2014-01-03 21:09:19 PST
※ 来源: homecox.com [来自: 66.]
|
|
|