Results 1 to 20 of 20
 12132011, 08:51 PM #1Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Get first 40 digits of a BigInteger
Hi, I need to write a program for which I need to get the first 40 digits of many BigInteger numbers, say about 100000 So, I can generate all these numbers in less than 2 seconds, but how do I get
the first 40 digits of all the numbers? I tried using toString(), it works but it is very very slow. I need something faster please help!
 12132011, 09:06 PM #2
Re: Get first 40 digits of a BigInteger
Which are the first 40? From the left or from the right end of the number?
Can you post a SSCCE that compiles and demonstrates your problem?
 12132011, 09:10 PM #3Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
The first 40 digits. Actually I need to get the first 40 digits of the first 100000 Fibonacci numbers. Sorry, but how to write a
SSCCE? I am actually new here, sorry for my lack of knowledge :(
 12132011, 09:14 PM #4
Re: Get first 40 digits of a BigInteger
Google gives this: Short, Self Contained, Correct Example
To work on the problem we need code.
How many Fibonacci numbers do you need before you get one that has 40 digits?
 12132011, 09:19 PM #5Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
Java Code:import java.io.*; import java.util.*; import java.math.BigInteger; public class Main { public static void main(String[] args){ BigInteger temp = BigInteger.valueOf(1); BigInteger temp2 = BigInteger.valueOf(2); BigInteger []ar; ar = new BigInteger[100010]; ar[0] = temp; ar[1] = temp2; for (int i = 2; i <= 100005; i++){ BigInteger res = temp.add(temp2); BigInteger temp3 = temp2; temp2 = res; temp = temp3; String str = res.toString(); // This is the line which slows done the whole code in my opinion. } } }
Last edited by Norm; 12132011 at 09:22 PM. Reason: added code tags
 12132011, 09:24 PM #6
Re: Get first 40 digits of a BigInteger
What is the purpose of creating the String: str if you never use it?
If you remove the last statement in the loop, it will run faster.
 12132011, 09:26 PM #7Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
My plan was to get the first 40 digits of the numbers using str.substring(0, 40); But just the conversion to a string takes a whole lot of time so I omitted the latter part. How can I achieve this more efficiently?
 12132011, 09:27 PM #8Banned
 Join Date
 Dec 2011
 Posts
 143
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
Why have you got a huge array with only two values populated?
 12132011, 09:28 PM #9
Re: Get first 40 digits of a BigInteger
You need to post the code you are having the problem with.
The code you posted does not use the String str so it makes no sense to have it in the code.
 12132011, 09:30 PM #10
Re: Get first 40 digits of a BigInteger
The array isn't used in the loop either. It looks completely redundant.
 12132011, 09:34 PM #11Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
Ok here goes my whole code.
Java Code:import java.io.*; import java.util.*; import java.math.BigInteger; public class Main { public static void main(String[] args){ BigInteger temp = BigInteger.valueOf(1); BigInteger temp2 = BigInteger.valueOf(2); BigInteger []ar; ar = new BigInteger[100010]; ar[0] = temp; ar[1] = temp2; for (int i = 2; i <= 100005; i++){ BigInteger res = temp.add(temp2); BigInteger temp3 = temp2; temp2 = res; temp = temp3; String str = res.toString(); // This is the line which slows done the whole code in my opinion. int len = str.length(); int flag; if (len < 40) flag = len; else flag = 40; String substring = str.substring(0, flag); BigInteger ans = new BigInteger(substring); ar[i] = ans; //System.out.println(ans); } } }
Last edited by sgtlaugh; 12132011 at 09:36 PM. Reason: Forgot code tag
 12132011, 09:41 PM #12
Re: Get first 40 digits of a BigInteger
Can you detect if the value of a BigInteger has > 40 decimal digits and use division to remove the low order digits you don't want.
 12132011, 09:43 PM #13Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
Yes I tried division, it is slow like toString() because I have to perform it about 100,000 times
 12132011, 09:48 PM #14Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
I also tried using BigInteger.shiftRight(int bits) to trim result, but I don't know how to achieve this. It would have been much faster but I don't know if it's possible
 12132011, 09:51 PM #15
Re: Get first 40 digits of a BigInteger
You can't shift binary bits an even number of decimal digits.
 12132011, 09:58 PM #16
Re: Get first 40 digits of a BigInteger
Can you post the code you used with the division?
 12132011, 10:00 PM #17Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
Okay but how to solve my problem now? Any suggestions?
 12132011, 10:00 PM #18
Re: Get first 40 digits of a BigInteger
That's what I'm working on.
 12132011, 10:06 PM #19Member
 Join Date
 Dec 2011
 Posts
 12
 Rep Power
 0
Re: Get first 40 digits of a BigInteger
Sorry, I closed the division program and later reopened it and modified it to create this string program. I can of course rewrite it but I must go now. I'll check here later, please post a solution if you find any. Thanks a lot for your time and help, bye for now.
 12132011, 10:10 PM #20
Similar Threads

how can i store 30 int digits without using bigInteger class
By akeni in forum New To JavaReplies: 19Last Post: 11102011, 06:43 AM 
Java help 25element array of digits to store integers as large as 25 digits
By CCC3 in forum New To JavaReplies: 3Last Post: 10272011, 05:23 PM 
BigInteger
By 7cardcha in forum New To JavaReplies: 9Last Post: 10252011, 06:06 AM 
Value should be 7 or 8 digits .If 8 digits, the last should be a character
By renu in forum New To JavaReplies: 1Last Post: 01192011, 09:23 PM 
BigInteger
By windows.login in forum New To JavaReplies: 8Last Post: 07132010, 01:10 PM
Bookmarks