排它平方数
2016-02-28 13:39
274 查看
题目标题: 排它平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
思路:1、注意用到一个6位数的平方,所以int是不够用的,所以用long long 。
2、用循环求余,取出原6位数的每一位(函数check),若没有重复则再取出它平方后的每一位函数(checkb),再进行判断即可。
3、答案是 639172
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
思路:1、注意用到一个6位数的平方,所以int是不够用的,所以用long long 。
2、用循环求余,取出原6位数的每一位(函数check),若没有重复则再取出它平方后的每一位函数(checkb),再进行判断即可。
3、答案是 639172
#include <iostream> #include <string.h> using namespace std; int A[10],B[10]; int check (long long a){ do{ int k=a%10; if(A[k]!=0){ return 0;//有重复返回0 } A[k]=1; a=a/10; }while(a); return 1; } int checkb(long long j){ do{ int m=j%10; if(A[m]!=0) return 0; j= (j/10); }while(j); return 1; } int main(){ for(long long i=102345;i<=987654;i++){ memset(A,0,sizeof(A)); int t=check(i); if(t){ long long j=i*i; t=checkb(j); if(t)cout<<i<<" "<<j<<endl; } } return 0; }
相关文章推荐
- Gradle笔记——构建基础
- 存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18
- C语言(函数与宏)
- Android Studio初体验之导入eclipse项目
- nodejs request & response 对象
- 工具:Office for Mac 2016破解
- 从闭包案例中学习闭包的作用,会不会由你。
- NYOJ 又见拦截导弹
- 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码
- Activity生命周期详解
- 二分 Codeforces633D Fibonacci-ish
- 使用librtmp进行H264与AAC直播
- Eclipse is running in a JRE, but a JDK is required 解决方法
- Android内存优化-泛谈 (一)
- linux中根据进程的PID值来查找执行文件的及其路径
- Eclipse下搭建C/C++开发环境教程
- 源泉书签,助您管理海量收藏。www.yuanquanshuqian.com,今日更新:多标签功能已实现
- bzoj 1031: [JSOI2007]字符加密Cipher 后缀数组
- 【Manthan, Codefest 16B】【二分 or 递推暴力】A Trivial Problem 输出阶乘为m的所有数
- SVD奇异值分解