zhe nian tou ,cheng xu yuan zen me dou lan cheng zhe yang zi le ? xiao cheng xu zi ji qiao qiao jiu chu lai le ,ke tang zuo ye ba ?
public class Test6 {
public static void main(String[] args) { System.out.println(sum(1000)); System.out.println(len(1234)); }
public static int len(int num) { if(num < 0) { throw new IllegalArgumentException("num must be positive number."); } int len = 1; while(num > 10) { len++; num /= 10; } return len; }
public static int sum(int num) { if(num < 0) { throw new IllegalArgumentException("num must be positive number."); } int s = (num * (num + 1)) / 2; int a = 0; while(a <= num) { s -= a; a += 7; } return s; } }
Scanner input=new Scanner(System.in); int a=input.nextInt(); String b=a+""; b=b.trim(); System.out.println(b.length());
public int sum(int num){ if (num==1) return 1; else if (num%2==0) return (1+num)*num/2; else return (1+num)*num/2+(1+num)/2; }public int getResult(int maxNum){ return sum(maxNum)-sum(maxNum/7)*7; }
受到启发:public static int sum(int num) { if(num < 0) { throw new IllegalArgumentException("num must be positive number."); } int s = (num * (num + 1)) / 2; int last = num-num%7; s=s-(7+last)*(num/7)/2; return s; }
class biji { public static void main(String [] args) { int n = 1100; int m =100000000; for(int i=9;i>0;i--) { if(n/m<=0) m/=10; else { System.out.println("位数为:"+i); break; }
} } }
public static int sum(int num) { if(num < 0) { throw new IllegalArgumentException("num must be positive number."); } int s = (num * (num + 1)) / 2; int a = 0; while(a <= num) { s -= a; a += 7; } return s; } } 学习了,好方法!
觉得3楼和5楼第二个问题的程序可读性不错,可以说下7楼解决方案的优点吗? 我看时间复杂度都是一样的。 int s = (num * (num + 1)) / 2; //这个比3楼和5楼容易溢出
switch (输入的数n)
{
case n/100000000>0 : Sysem.out.println(n);berek;
下面依次判断
}
switch (输入的数n)
{
case n/100000000>0 : Sysem.out.println(n);berek;
下面依次判断
}
public class Test { //求1到i的和
public static int qiuHe(int i){
int sum = 0;
for(int j = 1;j <= i; j++){
sum += j;
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = 1000;
int k = 7;
int jieguo = qiuHe(num)-7*qiuHe(num/k);
System.out.println(jieguo);
}}
2》三楼写的就很好.
第二个,public add(){
int sum=0;
for(int i=0;i<1000;i++){
if(0!=i%7)
sum+=i;
}
return sum;
}
public static void main(String[] args) {
System.out.println(sum(1000));
System.out.println(len(1234));
}
public static int len(int num) {
if(num < 0) {
throw new IllegalArgumentException("num must be positive number.");
}
int len = 1;
while(num > 10) {
len++;
num /= 10;
}
return len;
}
public static int sum(int num) {
if(num < 0) {
throw new IllegalArgumentException("num must be positive number.");
}
int s = (num * (num + 1)) / 2;
int a = 0;
while(a <= num) {
s -= a;
a += 7;
}
return s;
}
}
int a=input.nextInt();
String b=a+"";
b=b.trim();
System.out.println(b.length());
public int sum(int num){
if (num==1)
return 1;
else if (num%2==0)
return (1+num)*num/2;
else
return (1+num)*num/2+(1+num)/2;
}public int getResult(int maxNum){
return sum(maxNum)-sum(maxNum/7)*7;
}
if(num < 0) {
throw new IllegalArgumentException("num must be positive number.");
}
int s = (num * (num + 1)) / 2;
int last = num-num%7;
s=s-(7+last)*(num/7)/2; return s;
}
{
public static void main(String [] args)
{
int n = 1100;
int m =100000000;
for(int i=9;i>0;i--)
{
if(n/m<=0)
m/=10;
else
{
System.out.println("位数为:"+i);
break;
}
}
}
}
if(num < 0) {
throw new IllegalArgumentException("num must be positive number.");
}
int s = (num * (num + 1)) / 2;
int a = 0;
while(a <= num) {
s -= a;
a += 7;
}
return s;
}
} 学习了,好方法!
我看时间复杂度都是一样的。
int s = (num * (num + 1)) / 2; //这个比3楼和5楼容易溢出
优点是用公式直接算出了1~num的自然数之和,效率上自然高一些。
如你所说,大数有可能溢出,但用循环做也有可能溢出,50步和100的关系。实际上7,14,21 .....也可以用等比数列求和公式得出,如我在11楼的回复。
稍微改一下
int s = Math.round(num/ 2 * (num + 1)) ;
这样适用的范围就和使用循环一样了
class PanDuan
{
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个10位以内的整数:");
String a=scanner.next();
System.out.println("这个数的位数是:"+a.length());
}
}
第二题
class QiuHe
{
public static void main(String[] args)
{
int k=0;
for (int i=0;i<1000 ;i++)
if (i%7!=0)
k+=i;
System.out.println(k);
}
}