杭电oj 1197 java实现

#杭电oj 1197 java

特殊的四位数字

查找并列出所有以十进制表示法表示的四位数字,该四位数字具有以下特性:
当以十六进制(以16为基数)表示时,其四位数之和等于其数字总和;
而以十二进制表示时,其四位数也等于其数字的总和(以12为基数的符号。

例如,数字2991的(十进制)数字之和为2 + 9 + 9 + 1 =21。
由于2991 = 1 * 1728 + 8 * 144 + 9 * 12 + 3,其十二进制表示为1893(12),并且这些数字也总计为21。
但是在16进制数2991中,BAF16为11 + 10 + 15 = 36,
因此程序应拒绝2991。

但是,下一个数字(2992)在所有三个表示形式中的总和为22
(包括BB016),因此2992应该在列出的输出上。
(我们不希望使用少于四位数的十进制数字(不包括前导零),
因此2992是第一个正确答案。)

import java.util.*;
public class Main {
	public static void main(String[] args) {
		for(int i=1000;i<=9999;i++) {//四位数
			int ge=i%10;//得到个位
			int shi=i%100/10;//得到十位
			int bai=i%1000/100;//得到百位
			int qian=i/1000;//得到千位
			int sum10=ge+shi+bai+qian;//存放十进制各位之和
			int sum12=0;//存放12进制各位之和
			int sum16=0;//存放16进制各位之和
			String i12=Integer.toString(i, 12);//用12进制表示i
			char[] arr=i12.toCharArray();//字符串转化成字符数组
			for(int j=0;j<arr.length;j++) {
				if((arr[j]>=97)&&(arr[j]<=98)) {//a~b:97-98
					sum12+=arr[j]-87;
				}else {//0~9
					sum12+=(arr[j]-48);
				}	
			}
			if(sum12==sum10) {//第一次判断,
				String i16=Integer.toString(i, 16);//用16进制表示i
				char[] arr2=i16.toCharArray();//字符串转化成字符数组
				for(int k=0;k<arr2.length;k++) {
					if((arr2[k]>=97)&&(arr2[k]<=102)) {//a~f:97-102
						sum16+=arr2[k]-87;
					}else {//0~9
						sum16+=(arr2[k]-48);
					}	
				}
				if(sum12==sum16) {//第二次判断
					System.out.println(i);
				}
			}
		}	
		}	
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值