特殊的四位数
来源:互联网 发布:自动外呼软件 编辑:程序博客网 时间:2024/05/21 09:14
(来源:POJ 2196 ZOJ 2405程序设计方法及在线实践指导(王衍等)例3.4,P140)
问题描述:
找出并输出所有的4位数(十进制数)中具有如下属性的数:四位数字之和等于其十六进制形式各位数字之和,也等于其十二进制形式各位数字之和。
例如:十进制数2991,其四位数字之和2+9+9+1 = 21。由于2991 = 1*1728 + 8*144 + 9*12 + 3,其十二进制形式为1893(12),其各位数字之和也为21.但是它的十六进制形式为BAF(16),其各位数字之和等于11+10+15 = 36。因此你的程序要舍去2991这个数据。
下一个数2992,其十进制、十二进制、十六进制形式各位数字之和均为22,因此2992符合要求,应该输出来。(只考虑4位数,2992是第一个符合要求的数)
输入:
本题没有输入。
输出:
你的程序要求输出2992及其他更大的、满足要求的四位数(要求严格按升序输出),每个数占一行(前后都没有空行),整个输出以换行符结尾。输出中没有空行。输出中的前几行如样例输出所示。
样例输入:
本题没有输入。
样例输出:
2992
2993
2994
2995
2996
2997
2998
2999
...
解题思路:
该题在求解时要用到枚举的算法思想,即枚举所有的四位数(1000-9999),判断其是否满足十六进制、十二进制和十进制形式的各位数之和相等。
这里要注意进制转换方法。将一个十进制数Num转换到M进制,其方法是:将Num除以M取余数,直到商为0为止,存储得到的余数,先得到的余数为低位,后得到的余数为高位进行排序,余数0不能舍去。由于此题需要得到Num在16、12和10进制下各位的和,所以只要累加其余数即可。
#include <stdio.h>#include <string.h>int main(){ int i; for(i=2000;i<=9999;i++) { int sum1=0,sum2=0,sum3=0; int tmp; tmp=i; while(tmp) { sum1+=tmp%16; tmp/16; } tmp=i; while(tmp) { sum2+=tmp%12; tmp/=12; } if(sum1!=sum2) continue; tmp=i; while(tmp) { sum3+=tmp%10; tmp/=10; } if(sum1==sum3) printf("%d\n",i); } return 0;}
- 特殊的四位数
- 【C++】特殊的四位数
- 一个特殊的四位数
- 特殊四位数
- 找特殊四位数
- 求不超过四位数的反序数
- 溢出问题 100!的最后四位数
- (Java初级)简单的四位数加密
- 一个关于四位数猜想的验证
- 寻找符合条件的四位数
- 上四位数的纪念帖
- 编写一个有要求的四位数
- 四位数中吸血鬼数的查找
- 输出四位数各位上的数字
- 一个四位数的9倍仍然是四位数,但是数字次序相反,编程求此四位数
- 算法:输入一个四位数,然后分别输出这个四位数的每一位数字
- 编程实现:一个四位数它的数字组合的最大四位数 减去数字组合的最小四位数等于它本身
- 特殊回文数字:求出5位数和6位数中各位上的数字之和为n的回文数。
- /proc初识
- 京东实时大数据平台
- JAVA基础语法2
- 限时抢购秒杀系统架构分析与实战
- Lightoj1003【判环操作】
- 特殊的四位数
- 一个人也要生活的精彩——土豆烧排骨
- Toolbar菜单动态改变item的图标(二)
- 《Linux相关文章索引(1)》
- codeforces 723 D. Lakes in Berland
- 那些年我们用过的日志框架
- 算法导论之矩阵链乘法详解
- c++设计模式之观察者模式(observer)
- 如何缓解考前综合症