- /*
- * 需求:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
- * 例如2+22+222+2222+22222(此时共有5个数相加),
- * 几个数相加有键盘控制。
- * 思路:可以看出第n个数是n位数,每一位为a
- * 第n个数为第n-1个数的10倍加a,由此可以使用递归的方法求得结果。
- * 分析:
- * a1=a;a2=a1*10+a,a3=a2*10+a...
- * 由此可以定义一个递归方法,传入上一个数的值num,返回sum的值。
- * 结束条件为num值达到最大,即num/(int)Math.pow(10,n-1)==a
- * 方法每调用一次,sum+=num;
- */
- class GetTest08 {
- private int n, a, sum = 0;
- public GetTest08(int n, int a) {
- super();
- this.n = n;
- this.a = a;
- System.out.println("结果为:" + getSum(a));
- }
- public int getSum(int num) {
- if (n < 0) {
- System.out.println("错误:n的值不能小于0。");
- System.exit(0);
- }
- if (a < -9 || a > 9) {
- System.out.println("错误:a的值只能为一位数。");
- System.exit(0);
- }
- if (n == 0)
- return 0;
- if (num / (int) Math.pow(10, n - 1) == a)
- return sum += num;
- getSum(num * 10 + a);
- return sum += num;
- }
- }
- public class Test08 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入a(每一位的数字)的值:");
- int a = sc.nextInt();
- System.out.println("请输入n(需要相加的个数)的值:");
- int n = sc.nextInt();
- new GetTest08(n, a);
- }
- }
复制代码 |
|