题目描述
在Main类中编写一个方法f(a,n)用来求a..a(这个数由n个a构成)的值。在主方法中输入a和n(a和n的范围均为1~9),调用f()求s=a+..+a...a的值,并输出s的值。例如2+22+222+2222+22222(此时a为2,n为5)。如果输入的a或n超过范围,则输出input error。
输入描述
a n
输出描述
a+..+a..a的值
输入样例
3 4
输出样例
3702
主要是这个方法f(a,n),不知道该怎么使用,还有一个超出范围输出input error,
三种方法,求采纳。
import java.util.*;
public class Main {
public static void main(String[] args) {
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int n = sc.nextInt();
if(a <1 || a > 9 || n<1 || n > 9)
System.out.println("input error");
System.out.println(main.f(a,n));
}
}
public int f(int a, int n){
//思路1:公式变换,同个切换不断乘以10,减少加的次数
// int sum = 0;
// int curr = a;
//2+22+222=2*3+20*2+200*1
// for(int i = n; i >= 1; i--){
// sum +=i*curr;
// curr*=10;
// }
//思路2:模拟,通过前一个乘以10再加自己得到实际的值
// int sum = 0;
// int curr = 0;
// for(int i = 1; i <= n; i++){
// curr=curr*10+a;
// sum += curr;
// }
//思路3:数学,通过数学方法直接得到第i项的值
int sum = 0;
for(int i = 1; i <= n; i++){
int curr = (int) ((Math.pow(10,i)-1)/9*a);
sum += curr;
}
return sum;
}
}
输入时判断a和n大于等于1小于等于9,
//先把a的原始值保存下来 b = a;
//累加这样 循环n-1次
a = a * 10 + b;
sum += a;
//sum就是结果
```java
```