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