问题描述:求S=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,由输入a(1 <= a <= 9)表示,相加的元素个数由输入b(b<= 1000)表示。
这个算法的优点在于,不用考虑数据溢出问题,因为,当a和b都比较大的时候,结果可能会非常大,甚至可能溢出,因此这里将计算结果保存为字符串处理。
Java代码如下:
import java.util.*;
class Test {
public static String sum(int a, int b) {
StringBuilder builder = new StringBuilder(); //存储计算结果
int extra = 0; //存储进位 while(b>0){
int value = a * b + extra; //将该位上所有的进行累加,并加上低位的进位
extra = value / 10; //求进位
builder.append(value % 10); //将最终结果的对应位添加到结果,倒序添加
b--;
} while (extra > 0) { //进位未处理完,接着处理
builder.append(extra % 10);
extra /= 10;
}
return builder.reverse().toString(); //将运算结果反转,并返回
}
} public class Main {
public static void main(String[] args) {
int a=9,b=3;
System.out.print("S="+a+"+...+");
for(int i=1;i<=b;i++)
System.out.print(a);
System.out.println("="+Test.sum(a,b)); } }
输出为:
S=9+...+999=1107