题目:求s=a+aa+aaa+aaaa+…的值,其中a是一个数字。例如2+22+222+2222+22222 (此时a=2,共有5个数相加,几个数相加和a的值由键盘输入控制)
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入相加的个数:");
int num = sc.nextInt();
System.out.println("请输入a的值:");
int a = sc.nextInt();
# 调用方法
compute(a, num);
compute1(a, num);
compute2(a, num);
}
// 方法一思路 找规律
// 1 11 111 1111 11111
// i + (0 * i) ,i + (10 * i) ,i + (10 * i) + (i * 100) 。。。。。
// 方法一
public static void compute(int a, int num) {
int s = 0;
int b = 0; // 用来存储累加的数据
for (int i = 0; i < num; i++) {
// Math.pow(a, b) a 的 b 次方
b += Math.pow(10, i) * a; // 累加的数据 a aa aaa aaaa aaaaa .....
s += b;
System.out.println(b);
}
System.out.println("S为:" + s);
}
// 方法二
public static void compute2(int a, int num) {
// 定义一个 String 类,值为空
String str = "";
int s = 0;
for (int i = 0; i < num; i++) {
// 这样就能累加字符串, 因为我 a 传的是 int 类型,如果我上面的 a 接收的是 String 类型,就可以去掉 + "",但效率极低,每一次都会产生两个对象
// 可以通过 String.valueOf(a) 方法 将 a 转换成 int,而且效率更高,只产生一个对象
str += a + "";
System.out.println(str);
s += Integer.parseInt(str);
}
System.out.println("S为:" + s);
}
// 方法三
public static void compute3(int a, int num) {
// new 一个 StringBuilder类,这是可变的字符串类,值为空
// 为什么用 StringBuilder ? 它在累加字符串更具优势,并且只产生一个对象
StringBuilder sb = new StringBuilder();
int s = 0;
for (int i = 0; i < num; i++) {
// sb.append(a) 相当于 sb += a
// sb.append(a).toString() 将 StringBuilder 类型 转换 为 String 类型
// Integer.parseInt() 将数字型的 String 类型 转为 int 类型
int b = Integer.parseInt(sb.append(a).toString());
System.out.println(b);
s += b;
}
System.out.println("S为:" + s);
}
}
结果都为