这么有发一个 唉我贴的都累了 sum = 1; for(int i =1;i<n;i++){ // n 1+11+...个数 sum += sum*11 +1;//sum += sum + sum*10 + 1; }
int foo(int i) { if (i == 1) return 1; else return 10^i*1/10+foo(i-1); }
import java.math.*; public class Jisuan { public static int fun(int n) { if(n == 1) return 1; else return (int) ((Math.pow(10, n)-1)/9+ fun(n-1)); } public static void main(String args[]) { int result = fun(8); System.out.println(result); }}
((Math.pow(10, n)-1)/9 数列的通项
code=Java]public class RecursionV1 { public int recursion(int n) { if(n != 1) { int sum = 0; int tmp = 0; tmp = n/10; sum = recursion(tmp); sum = n + sum; return sum; } else return 1; }
public static void main(String[] args) { RecursionV1 rv = new RecursionV1(); System.out.println(rv.recursion(1111)); } }[/code]
没发好,重发public class RecursionV1 { public int recursion(int n) { if(n != 1) { int sum = 0; int tmp = 0; tmp = n/10; sum = recursion(tmp); sum = n + sum; return sum; } else return 1; }
public static void main(String[] args) { RecursionV1 rv = new RecursionV1(); System.out.println(rv.recursion(1111)); } }
public static int go(int n) { double t = 0; for (int i = 1; i <= n; i++) { t += Math.pow(10, i - 1); } if (t == 1) { return 1; } else { return (int) (t + go(n - 1)); } } public static void main(String[] args) { System.out.println(T.go(2)); }
int s=0,i=1;;sum(int index) { if(s>index)
System.out.println(s); else { s=s*10+i; ++i; }}
先给个递归的算法,递归的是第n个数,然后累加,哈哈,可能不算纯粹的递归吧: public class Sum { public static int no(int i){ if(i==1) return i; else return (int)(Math.pow(10, i-1) + no (i-1)); }
public static int sum(int i){ int total = 0;
if(i==1) total = no(i); else{ while (i > 0){ total += no(i); i--; } } return total; }
public static void main(String args[]){ System.out.println(sum(5)); } }再给一个利用归纳法推出来的算法。从整个算式的和出发,当n=1时,和sum=1;当n=2时,sum=11+1=10^1 + 1*2; 当n=3时,sum = 111 + 11 + 1 = 10^2 + 10^1 * 2 + 1 *3...把1看成10的0次方,那么很容易得到我们需要的这个sum公式:sum(n) = 10^(n-1)*1 + 10^(n-2)*2 + ... 10^m*k + ... + 10^0*n (m+k=n)。代码如下: public class Sum { public static int sum(int i){ double total = 0; int count = 1;
if(i==1) total = Math.pow(10, i-1); else{ while (i > 0){ total += Math.pow(10, i-1) * count; i --; count ++; } } return (int)total; }
public static void main(String args[]){ System.out.println(sum(5)); } }两个算法效率显然是后者更好,复杂度是O(n)。当然了,没有加入越界处理,lz自己加一下吧。
不好意思,上面第二段代码完全可以写成这样,不用那个if/else判断,糊涂了!public class Sum { public static int sum(int i){ double total = 0; int count = 1;
while (i > 0){ total += Math.pow(10, i-1) * count; i --; count ++; } return (int)total; }
public static void main(String args[]){ System.out.println(sum(6)); } }
for(int i =1;i<n;i++){ // n 1+11+...个数
sum += sum*11 +1;//sum += sum + sum*10 + 1;
}
{
if (i == 1) return 1;
else return 10^i*1/10+foo(i-1);
}
import java.math.*;
public class Jisuan {
public static int fun(int n)
{
if(n == 1)
return 1;
else
return (int) ((Math.pow(10, n)-1)/9+ fun(n-1));
}
public static void main(String args[])
{
int result = fun(8);
System.out.println(result);
}}
public int recursion(int n) {
if(n != 1) {
int sum = 0;
int tmp = 0;
tmp = n/10;
sum = recursion(tmp);
sum = n + sum;
return sum;
}
else return 1;
}
public static void main(String[] args) {
RecursionV1 rv = new RecursionV1();
System.out.println(rv.recursion(1111));
}
}[/code]
public int recursion(int n) {
if(n != 1) {
int sum = 0;
int tmp = 0;
tmp = n/10;
sum = recursion(tmp);
sum = n + sum;
return sum;
}
else return 1;
}
public static void main(String[] args) {
RecursionV1 rv = new RecursionV1();
System.out.println(rv.recursion(1111));
}
}
double t = 0;
for (int i = 1; i <= n; i++) {
t += Math.pow(10, i - 1);
}
if (t == 1) {
return 1;
} else {
return (int) (t + go(n - 1));
}
} public static void main(String[] args) {
System.out.println(T.go(2));
}
{
if(s>index)
System.out.println(s);
else
{
s=s*10+i;
++i;
}}
public class Sum {
public static int no(int i){
if(i==1)
return i;
else
return (int)(Math.pow(10, i-1) + no (i-1));
}
public static int sum(int i){
int total = 0;
if(i==1)
total = no(i);
else{
while (i > 0){
total += no(i);
i--;
}
}
return total;
}
public static void main(String args[]){
System.out.println(sum(5));
}
}再给一个利用归纳法推出来的算法。从整个算式的和出发,当n=1时,和sum=1;当n=2时,sum=11+1=10^1 + 1*2; 当n=3时,sum = 111 + 11 + 1 = 10^2 + 10^1 * 2 + 1 *3...把1看成10的0次方,那么很容易得到我们需要的这个sum公式:sum(n) = 10^(n-1)*1 + 10^(n-2)*2 + ... 10^m*k + ... + 10^0*n (m+k=n)。代码如下:
public class Sum { public static int sum(int i){
double total = 0;
int count = 1;
if(i==1)
total = Math.pow(10, i-1);
else{
while (i > 0){
total += Math.pow(10, i-1) * count;
i --;
count ++;
}
}
return (int)total;
}
public static void main(String args[]){
System.out.println(sum(5));
}
}两个算法效率显然是后者更好,复杂度是O(n)。当然了,没有加入越界处理,lz自己加一下吧。
double total = 0;
int count = 1;
while (i > 0){
total += Math.pow(10, i-1) * count;
i --;
count ++;
} return (int)total;
}
public static void main(String args[]){
System.out.println(sum(6));
}
}