杭电ACM 1041 Computer Transformation java代码详解AC
最后更新于:2022-04-01 09:48:46
~~~
# Computer Transformation
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6916 Accepted Submission(s): 2504
~~~
Problem Description
A sequence consisting of one digit, the number 1 is initially written into a computer. At each successive time step, the computer simultaneously tranforms each digit 0 into the sequence 1 0 and each digit 1 into the sequence 0 1. So, after the first time step, the sequence 0 1 is obtained; after the second, the sequence 1 0 0 1, after the third, the sequence 0 1 1 0 1 0 0 1 and so on.
How many pairs of consequitive zeroes will appear in the sequence after n steps?
Input
Every input line contains one natural number n (0 < n ≤1000).
Output
For each input n print the number of consecutive zeroes pairs that will appear in the sequence after n steps.
Sample Input
~~~
2
3
~~~
Sample Output
~~~
1
1
~~~
本题看起来也不难,但是注意一个问题就是当输入的数值达到大约在40左右的时候,普通的int类型的数据就会发生溢出,无法存放这么大的数字,这就是大数啦,所以需要你特别的对大数进行一定的处理才能使得不发生溢出。一开始我做的时候就是没有考虑到这个问题所以感觉结果明明是对的呀,但是就是一直出错,后来终于发现大数溢出的问题,稍微改了下就好了。
~~~
import java.math.BigDecimal;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
int num = scanner.nextInt();
BigDecimal sum = new BigDecimal(0);
sum = funct(num);
System.out.println(sum);
}
}
public static BigDecimal funct(int i) {
BigDecimal[] array = new BigDecimal[i+1];
int sum = 0;
array[1] = new BigDecimal(0);
if(i == 1)
return array[1];
array[2] = new BigDecimal(1);
for(int j = 3; j <= i ; j++)
{
array[j] = array[j - 1].add(array[j - 2].multiply(new BigDecimal(2))) ;
}
return array[i];
}
}
~~~