【题目08】找规律求a+aa+aaa+a……a的和

【程序8】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)

package com.share.test01_10;

/**
 * 【程序8】题目:
* 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
* 例如2+22+222+2222+22222(此时共有5个数相加) * * @author brx */ public class Test08 { public static void main(String[] args) { test(); } /** * 思路:找规律,将这个规律表示出来
* 思路1:字符串表示,通过控制个数来将这几个数表示出来
* 思路2:用数字之间的规律来表示,第2个数等于第1个数加上20,第3个数等于第2个数加上200……
* 思路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:
* 调用递归方法循环求和
* 求和方法 * * @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; } }

你可能感兴趣的:(【题目08】找规律求a+aa+aaa+a……a的和)