【程序8】
題目:求s=a+aa+aaa+aaaa+aa...a的值褐鸥,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時共有5個數(shù)相加)
package com.share.test01_10;
/**
* 【程序8】題目:<br>
* 求s=a+aa+aaa+aaaa+aa...a的值赐稽,其中a是一個數(shù)字叫榕。<br>
* 例如2+22+222+2222+22222(此時共有5個數(shù)相加)
*
* @author brx
*/
public class Test08 {
public static void main(String[] args) {
test();
}
/**
* 思路:找規(guī)律,將這個規(guī)律表示出來<br>
* 思路1:字符串表示姊舵,通過控制個數(shù)來將這幾個數(shù)表示出來<br>
* 思路2:用數(shù)字之間的規(guī)律來表示晰绎,第2個數(shù)等于第1個數(shù)加上20,第3個數(shù)等于第2個數(shù)加上200……<br>
* 思路3:遞歸括丁,后面一個數(shù)(從第2個數(shù)開始)等于前面一個數(shù)的乘以10再加上個位上的數(shù)
*/
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:個位上的數(shù)字
* @param m:相加的數(shù)字的個數(shù)
*/
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:個位上的數(shù)字
* @param m:相加的數(shù)字的個數(shù)
*/
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:個位上的數(shù)
* @param m:第m個數(shù)
* @return result:規(guī)律中第m個數(shù)的結果
*/
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>
* 調用遞歸方法循環(huán)求和<br>
* 求和方法
*
* @param n:個位上的數(shù)
* @param m:數(shù)的個數(shù)
* @return sum:所有數(shù)相加的和
*/
public static int test4(int n, int m) {
int sum = 0;
for (int i = 1; i <= m; i++) {
sum += test3(n, i);
}
return sum;
}
}