【程序8】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)
package com.share.test01_10;
/**
* 【程序8】题目:<br>
* 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。<br>
* 例如2+22+222+2222+22222(此时共有5个数相加)
*
* @author brx
*/
public class Test08 {
public static void main(String[] args) {
test();
}
/**
* 思路:找规律,将这个规律表示出来<br>
* 思路1:字符串表示,通过控制个数来将这几个数表示出来<br>
* 思路2:用数字之间的规律来表示,第2个数等于第1个数加上20,第3个数等于第2个数加上200……<br>
* 思路3:递归,后面一个数(从第2个数开始)等于前面一个数的乘以10再加上个位上的数
*/
public static void test() {
System.out.println(test1(2, 2));
System.out.println(test2(2, 2));
System.out.println(test4(2, 2));
}
/**
* 思路1
*
* @param n:个位上的数字
* @param m:相加的数字的个数
*/
public static int test1(int n, int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
StringBuffer sb = new StringBuffer();
for (int j = 0; j <= i; j++) {
sb.append(String.valueOf(n));
}
sum += Integer.parseInt(sb.toString());
}
return sum;
}
/**
* 思路2
*
* @param n:个位上的数字
* @param m:相加的数字的个数
*/
public static int test2(int n, int m) {
int sum = 0;
int t = 0;
for (int i = 0; i < m; i++) {
t = n + t;
sum = t + sum;
n = n * 10;
}
return sum;
}
/**
* 递归方法
*
* @param n:个位上的数
* @param m:第m个数
* @return result:规律中第m个数的结果
*/
public static int test3(int n, int m) {
int result = n;
if (m > 1) {
result = test3(n, m - 1) * 10 + n;
}
return result;
}
/**
* 思路3:<br>
* 调用递归方法循环求和<br>
* 求和方法
*
* @param n:个位上的数
* @param m:数的个数
* @return sum:所有数相加的和
*/
public static int test4(int n, int m) {
int sum = 0;
for (int i = 1; i <= m; i++) {
sum += test3(n, i);
}
return sum;
}
}