代码题:求 s=a+aa+aaa+aaaa+aa...a 的和,其中a是一个数字。

本文介绍了一道Java编程题目,要求根据用户输入的数字和个数计算连续数字之和,例如求3+33+333+...的和。作者提出将问题转换为求1+11+111...的和再乘以原始数字,通过分解问题简化求解。文中提供了解决10的乘方问题的方法,并给出了参考代码,最终实现了求和的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

几天前笔者在做Java编程题的时候,遇到了这样一道题:
求 s=a+aa+aaa+aaaa+aa…a 的和,其中a是一个数字,例如2+22+222+2222+2…2 最大有几个2由键盘录入得到 例如提示用户 请输入你要求和的数字 用户输入的是3 请输入你要的最大的数字个数 用户输入的是5 那么就是求 3+33+333+3333+33333 的和 请编写程序实现。
相信网上已经有不少这个题的答案,所以写这篇博客,是为了为大家提供一个作为初学者面对这道题的可能不太一样的思路。

笔者看到这道题的思路

如题干中所示,一共需要输入两个数字,第一个是需要求和的数字,第二个是数字最多的个数,例如,第一次输入5,第二次输入3,则求的是5+55+555的和。不难可以看出,不论输入的是几, 最后都可转化为1+11+1…1的和(最多的1的数目取决于第二次输入的数字)再乘以第一次输入的数字。于是这个问题就分解成了:(1)用键盘输入一个数字,求出1+11+1…1(定为a式)(最多的1的数目取决于输入的这个数字)的和(2)用1中的结果再乘以一个之前输入好的数字。显然,问题二对于初学者来说很好解决,我们只需要解决问题(1)。
不难看出,问题(1)又可分解为,(1)+(1+10)+(1+10+100),即100+(100+101),以此类推,到这里,这个问题就成了乘方再相加的问题了。(注,Java的math类中有求乘方的方法,有兴趣可自行查询)对于对math类接触不多的初学者来说,现在唯一的问题就是求10的乘方的问题,由于我们只需要求10的几次方,所以构造一个方法,用循环就可以很好的解决这个问题。
解决10的乘方的方法参考代码:

   public static int show(int a) {
    if (a == 0) {
        return 1;
    }
    else {
        int aa = 1;
        while (a != 0) {
            aa = aa * 10;
            a--;
        }
        return aa;
    }
}

次方法对于初学者来说比较便于理解。
解决了这个问题之后,其他的问题对初学者来说就不是什么难事了。

参考代码

package org.mytesedemo;

import java.util.Scanner;

public class mytese1 {
    public static void main(String[] args) {
        int sum=0;
        int sum1=0;
        int sum2=0;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要求和的数字");
        int a=sc.nextInt();
        System.out.println("请输入最长数字的个数");
        int b=sc.nextInt();
        for (int i = 1; i <= b; i++) {
            sum=sum+show(i-1);//得出1,11,111
            sum1=sum+sum1;//求出1,11,111等数相加的和
        }
        sum2=sum1*a;//求出最后结果
        System.out.println(sum2);
    }
    public static int show(int a) {
        if (a == 0) {
            return 1;
        }
        else {
            int aa = 1;
            while (a != 0) {
                aa = aa * 10;
                a--;
            }
            return aa;
        }

    }
}

运行结果:
请输入你要求和的数字
5
请输入最长数字的个数
5
61725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值