天天看點

求s=a+aa+aaa+aaaa+aa...a的值

這道題目是在一次面試中遇到的,難度不大...... 題目 :求 s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。 程式分析: 此道題需要輸入兩個數,第一個數m用來組成每一位加數,第一位加數由一個m組成,第二位加數由兩個m組成......以此類推;第二個數n表示一共幾個數相加。比如:你輸入一個m為2,n為3,就表示要計算2+22+222的值。很容易發現,加數表達式的每一項,後一項是前一項的值乘以十再加上m,是以我們可以用這個方法來擷取每一項,在擷取每一項的同時拼接整個字元串以及計算整體結果. 代碼:

import java.util.Scanner;

import org.junit.Test;

public class Addend {
	/**
	 * 用于相加的方法
	 * @param m
	 * @param n
	 * @return
	 */
	public String addend(int m , int n) {
		//定義一個變量用來存放整體結果
		StringBuffer result = new StringBuffer();
		//定義一個變量用來存放加法計算結果
		int addResult = 0;
		//定義一個變量用來計算加法表達式的每一項
		int tempNum = 0;
		for(int i = 0 ; i < n ; i ++) {
			tempNum = tempNum * 10 + m;
			//拼接加數表達式每一項
			result.append(tempNum);
			//如果是加數表達式的最後一項則拼接"=",否則拼接"+"
			if(i == n-1) {
				result.append("=");
			} else {
				result.append("+");
			}
			//計算結果
			addResult += tempNum;
		}
		result.append(addResult);
		return result.toString();
	}
	//測試方法
	@Test
	public void test() {
		//先從鍵盤擷取m和n
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		int n = sc.nextInt();
		sc.close();
		//調用相加方法
		String result = addend(m, n);
		System.out.println(result);
	}
}
           

運作結果:

求s=a+aa+aaa+aaaa+aa...a的值