2020蓝桥杯javaB-----八次求和

1.题目描述
【问题描述】
给定正整数 n, 求 1^8 + 2^8 +···+ n^8 mod 123456789 。其中 mod 表示取余。
【输入格式】
输入的第一行包含一个整数 n。
【输出格式】
输出一行,包含一个整数,表示答案。
【样例输入】
2
【样例输出】
257
【样例输入】
987654
【样例输出】
43636805
【评测用例规模与约定】
对于 20% 的评测用例,1≤n≤20。
对于 60% 的评测用例,1≤n≤1000。
对于所有评测用例,1≤n≤1000000。

2.思路
用BigInteger里面的pow()函数
valueOf(boolean b): 返回 boolean 参数的字符串表示形式。.

valueOf(char c): 返回 char 参数的字符串表示形式。

valueOf(char[] data): 返回 char 数组参数字符串表示形式。

valueOf(double d): 返回 double 参数的字符串表示形式。

valueOf(float f): 返回 float 参数的字符串表示形式。

valueOf(int i): 返回 int 参数的字符串表示形式。

valueOf(long l): 返回 long 参数的字符串表示形式。

3.代码实现
方法一:

package 蓝桥杯;

import java.math.BigInteger;
import java.util.Scanner;

public class 八次求和 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
     Scanner sc=new Scanner(System.in);
     int n=sc.nextInt();
     BigInteger sum=BigInteger.ZERO;//0
     for(int i=1;i<=n;i++)
     {
    	 BigInteger b=BigInteger.ONE;
    	 sum=sum.add(new BigInteger(i+"").pow(8));//为什么要i+""搞不懂
    	 //string =i+"" 把i转为string型
    	 //BIgInteager构造函数所接收的参数是一个String类型的;i+""相当于String.valueOf(i)
     }
     System.out.println(sum.mod(new BigInteger("123456789")));
     
	}

}

方法二:

package 蓝桥杯;

import java.math.BigInteger;
import java.util.Scanner;

public class 八次求和1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger sum=BigInteger.ZERO;
		BigInteger mod1=BigInteger.valueOf(123456789);
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		for(int i=1;i<=n;i++)
		{  BigInteger temp=BigInteger.valueOf(i);
			sum=sum.add(temp.multiply(temp).multiply(temp).multiply(temp).multiply(temp).multiply(temp).multiply(temp).multiply(temp));
			
		}
		System.out.println(sum.mod(mod1));

	}

}

你可能感兴趣的:(蓝桥杯,java,java,算法,蓝桥杯,2020)