java吸血鬼数字_吸血鬼数字(java)
*吸血鬼数字是指位数为偶数的数字,可以由一堆数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排列。以两个0结尾的数字是不允许的
例如,下列数字都是吸血鬼数字
1260=21*60 1827=21*87 2187=27*81
写一个程序,找出所有4位的吸血鬼数字*
void test(){
int count = 0,num=0;
int from,to,val;
for(int i=10;i<100;i++) {
from = Math.max(1000/i, i+1);//就是i*j>=1000的意思,在i已知的情况下,j的最小值基本已经确定,从这个值开始内循环比较高效。
to = Math.min(10000/i, 100);
for(int j=from;j
val = i*j;
if(val%100==0 || (val-i-j)%9!=0) continue;
count++;
char[] cval = String.valueOf(val).toCharArray();
char[] ij = (String.valueOf(i)+String.valueOf(j)).toCharArray();
Arrays.sort(cval);
Arrays.sort(ij);
if(Arrays.equals(cval,ij)){
num++;
System.out.print("第"+num+"组吸血鬼数字:");
System.out.println(i+"*"+j+"="+val);
}
}
}
System.out.println("总共比较"+count+"次");
}
}
关于算法的解释,来自网友MT502
假设val = 1000a + 100b + 10c + d, 因为满足val = x * y, 则有x = 10a + b, y = 10c + d
则val - x - y = 990a + 99b + 9c = 9 * (110a + 11b + c), 所以val - x - y能被9整除。
所以满足该条件的数字必定能被9整除,所以可以直接过滤其他数字。
我准许做一下
x*y = val = 1000a + 100b + 10c + d;
我们假设
x = 10a + b, y = 10c + d
则
x*y-x-y
= val - x-y
= (1000a + 100b + 10c + d) - (10a+b) - (10c +d) = 990a + 99b + 9c
= 9 * (110a + 11b + c);
对于别的组合可能性,结果一样,比如
x=10c+a; y=10d+b;
x*y-x-y
= val - x-y
= (1000a + 100b + 10c + d) - (10c+a) - (10d +b) = 999a + 99b -9d
= 9 * (110a + 11b -d);
当然也能被9整除了
java吸血鬼数字_吸血鬼数字(java)相关推荐
- java吸血鬼数字_吸血鬼数字的简单实现
从think in java上面看到的吸血鬼数字,自己写了一个简单的实现 package com.zyl; import java.util.ArrayList; import java.util.A ...
- java求幸运数字_幸运数字问题 —— Java实现
题目描述 小雅同学认为6,8是她的幸运数字,而其他数字均不是,一个幸运数是指在十进制表示下只含有幸运数字的数.给定你一个区间(a,b)a和b之间(其中包括a和b幸)运数的个数. 输入描述 输入两个整数 ...
- 马士兵 java 学习笔记_马士兵java教程笔记1
---恢复内容开始--- 前记 虽然已经是个研究生了,但是会的东西还是特别的少 甚至连java都不能说是很会 所以准备从现在开始能好好的学习java 变成java master 标识符 标识符是由字母 ...
- java datetime 转换_如何实现Java日期时间格式转换
Java日期时间以及日期相互转换 Java日期时间,以及相互转化,供大家参考,具体内容如下 package com.study.string; import java.text.ParseExcept ...
- A002、java环境搭建_第一个java程序
目录 1.内容介绍 2.软件开发概述 2.1 软件开发概念 2.2 软件开发示例 2.3 软件开发语言 2.3.1 计算机语言概述 2.3.2 计算机语言分类 2.4 小结 3.Java概述 3.1 ...
- java 02-cf_cf活动如何设置java环境变量_如何设置java环境变量
cf助手怎么连接wifi_连接无线网设置 对于刚刚学习java的win7用户来说,首先要学会安装jdk和配置java环境变量,这是学习java的唯一途径,否则编写的代码运行时会出现bug.关于这一点, ...
- java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...
面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...
- java console 交互_实例讲解java中Console类的用法
java的Console类的使用方法及实例 java的Console类的使用方法及实例 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Win ...
- java for循环_愉快地学Java语言:第五章 循环
导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...
- java 内存空间_怎样用java实现存储空间动态分配
1.java是如何管理内存的 Java的内存管理就是对象的分配和释放问题.(两部分) 分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象 ...
最新文章
- 《评人工智能如何走向新阶段》后记(再续4)
- Hibernate 所有缓存机制详解
- PHP生成PDF并转换成图片爬过的坑
- Maven安装和配置及使用方法
- cuda、cudnn相关问题链接
- leetcode面试题 04.03. 特定深度节点链表(bfs)
- Data-Mediator入门系列4----常用类说明
- 企业实战|CentOS8安装Zabbix 4.4
- Exploit Kit攻击工具包流量锐减96%!这段时间究竟发生了什么?
- 使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
- 利用ExcelJS读取Excel文件
- 【光学】基于matlab圆孔菲涅尔衍射【含Matlab源码 522期】
- android9手机* 代码,android Telephony学习 --- 第九篇 USSD简介
- 如何轻松清除Google搜索记录
- NC 一些常用方法总结
- Android 100元平板也能吃鸡玩王者!小米平板刷机神盾dot1.2保姆级教程。
- ESP32数据存储 nvs
- Redis4.0、5.0、6.0、7.0特性整理(持续更新)
- 学习笔记-主成分分析法
- mysql记录历史价格_mysql历史订单
热门文章
- 微信小程序和微信H5有什么区别?
- malloc()动态分配内存
- 微信小程序开发--组织通讯录
- 一篇讲给自己听的k8s网络模型
- 世界上最经典的25句话[转载]
- 歌礼与先声签订利托那韦片供应协议;索迪斯华东物流新仓于上海松江区开业 | 美通企业日报...
- 在移动硬盘中安装win10和macos双系统
- 2021年黄石二中高考成绩查询,黄石二中2019高考喜报成绩、一本二本上线人数情况...
- VUE React Angular
- 百度地图SDK无法定位到当前所在位置;一直显示天安门