日期:2014-05-20  浏览次数:20663 次

这是最后一到基础思维题了
用代码实现1+11+111+1111+11111(共n项之和).

------解决方案--------------------
给你个公式,你就会算了。
sum=n+(n-1)*10+(n-2)*10^2+...+1*10^(n-1)
------解决方案--------------------
for(int i=1; i <=n; i++)
result += (long)(i*Math.pow(10, n-i));
------解决方案--------------------
int base=1, sum=0;
for (int i=0; i <100; i++) {
sum += base;
base = base * 10 + 1;
}
System.out.println( "sum= " + sum);

------解决方案--------------------
阿宝的主意好,可读性强,容易理解
------解决方案--------------------
同意楼上的。。

我想的是笨方法
定义string数组,然后依次赋值
然后再將sting 转化为long。。
再累加。。
太笨的方法。。
------解决方案--------------------
递归
------解决方案--------------------
好,来个递归的:)
public static long recursionToSum(int n) {
if (n == 1) {
return 1;
} else {
int sum = 1;
for(int i = n-1; i > 0; i--) {
sum += Math.pow(10, i);
}
return recursionToSum(n-1) + sum;
}
}
------解决方案--------------------
haha.
n个1+(n-1)个10+(n-2)个100....
------解决方案--------------------
我来写个递归+递归的:
private static long BASE_NUMBER = 1;

public static long sum(int n) {
if(n == 1){
return getNumber(n);
}else{
return getNumber(n) + sum(n - 1);
}
}

public static long getNumber(int n){
if(n == n){
return BASE_NUMBER ;
else{
return BASE_NUMBER +(n - 1) * 10;
}
}

当BASE_NUMBER = 2时就是计算2+22+222+....
------解决方案--------------------
其实很简单的一个问题
就是 (1 +11+111+1111)*9=(9+99+999+9999)=11110-4
所以通项公式都出来了
f(n-1)=((10^n-1)/9-n)/9
不需要递归
------解决方案--------------------
class c
{public static void main(String [] args)
{
long sum=0;
for(int n=0;n <=100;n++)
{
for(int m=0;m <=n;m++)
{
sum+=Math.pow(10,(m-1));
}
}
System.out.println( "sum= "+sum);
}

}