Java的大数计算BigNumber

Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!

Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.

Input Specification:

Each input file contains one test case. Each case contains one positive integer with no more than 20 digits.

Output Specification:

For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.

Sample Input:

1234567899

Sample Output:

Yes
2469135798
不知道为什么有一个样例没过,觉得写得没毛病啊
 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3
 4 public class A {
 5
 6     public static void main(String[] args) {
 7         Scanner cin = new Scanner(System.in);
 8         BigInteger a = cin.nextBigInteger();
 9         BigInteger bb = a;
10         BigInteger c = BigInteger.valueOf(10);
11         BigInteger d;
12         BigInteger ans = a.add(bb);
13         BigInteger b = ans;
14         boolean book = true;
15         int[] book0 = new int[10];
16         while(!a.equals(BigInteger.valueOf(0))) {
17 //            System.out.println(a.equals(0));
18             d = a.mod(c);
19             a = a.divide(c);
20             book0[d.intValue()] = 1;
21         }
22         while(!b.equals(BigInteger.ZERO)) {
23             d = b.mod(c);
24             b = b.divide(c);
25             if(book0[d.intValue()] != 1) {
26                 book = false;
27                 break;
28             }
29         }
30         if(book == false) {
31             System.out.println("No");
32         }
33         else {
34             System.out.println("Yes");
35         }
36         System.out.println(ans);
37
38     }
39
40 }

原文地址:https://www.cnblogs.com/xuyanqd/p/8590785.html

时间: 2024-11-08 21:32:29

Java的大数计算BigNumber的相关文章

重温当年入门战之大数计算

大数计算: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算. 大数计算简析:        大数计算实现的理论是,首先提取输入值赋予指定String字符串. 通过String.charAt(index)提取每一位的值,赋予int数组. 然后求相乘每一位的值和进位. 直到最后每一位都求出来. 代码实现:         1 import java.awt.*; 2 import java.awt.

HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)

在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平行)为,i!=j时,a1[j]=a2[j],且随机取区间[0,n-1]内的整数.然后a1[i],a2[i]在保证a1[i]<a2[i]的前提下同样随机. 由于D条线段各自跟自己维度的轴平行,我们可以转换成只求第i个维度与第j个维度的相交期望,然后乘以C(2,n)就好了 显然线段[a1,a2]和线段[

【Java】Float计算不准确

大家可能都遇到过,float在计算某些值时,会有不准确的情况. 比如如下情况: 计算不准确 package com.nicchagil.study.java.demo.No10float计算.No01不准确的举例; public class Call { public static void main(String[] args) { System.out.println(0.08f + 0.01f); } } 打印: 0.089999996 用BigDecimal代替计算 如果需要准确计算fl

java多线程之计算数量

package Thread.Abort; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; //计数类 class Count {//DATA priv

java通过经纬度计算两个点的之间的距离的算法

通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的.private const double EARTH_RADIUS = 6378.137;private static double rad(double d){   return d * Math.PI / 180.0;} public static double GetDistance(double lat1, double lng1, double lat2, double ln

初学java之大数处理

1 import java.text.*; 2 public class Gxjun 3 { 4 public static void main(String args[] ) 5 { 6 int n=123456789; 7 System.out.println("整数"+"按千分组号(带正好)"); 8 String s=String.format("%,+d",n); 9 System.out.println(s); 10 double n

一步一步写算法(之大数计算)

原文:一步一步写算法(之大数计算) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 我们知道在x86的32位cpu上面,int表示32位,如果核算成整数的话,大约是40多亿.同样,如果在64位cpu上面,能表示的最大整数就是64位二进制,表示的数值要大得多.那么在32位如果想表示大整数怎么办呢?那只能靠我们自己想办法了. 首先我们回顾一下我们手算整数的加减.乘除法是怎么做到的: (1)记住9*9之间的乘法口诀 (2)记住个位与个位之间的加

JAVA求解大数

题目链接:CLICK HERE~ 有了Java求解大数变得如此简单,以后再也不用担心大数模板了.哦啦啦啦. import java.math.BigInteger; import java.math.BigDecimal; import java.util.Scanner; class Main{ public static void main(String args[]){ Scanner cin = new Scanner(System.in); while(cin.hasNext()){

Java的大数操作分为BigInteger和BigDecimal

Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 package blog; 2 3 import java.math.BigDecimal; 4 import java.math.BigInteger; 5 import java.math.RoundingMode; 6 7 /** 8 * 9 * @author 瓦尔登湖畔的小木屋 10 * BigN