欢迎访问
讨论版列表 - 算法集锦 - 主题数: 41 | 文章数: 47 | 管理员: homecox

算法集锦

版面 | 文摘区 | 马克区

文章数: 1 | 分页: << 1 >>
admin
[回复] [修改] [删除] [返回版面] 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.]


Reply

Please log in first.