编程实现求2的零次方加2的一次方一直加到2的十次方的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程实现求2的零次方加2的一次方一直加到2的十次方的值相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
#include<math.h>
void main()
int i,n,sum=0;
printf("please input n:");
scanf("%d",&n);
for(i=0;i<=n;i++)
sum+=pow(2,i);
printf("sum=%d\\n",sum);
#include<stdio.h>
#include<math.h>
void main()
int i=0,n,sum=0;
printf("please input n:");
scanf("%d",&n);
while (i<=n)
sum+=pow(2,i);
i++;
printf("sum=%d\\n",sum);
普通算法:
double result = 0;
for (int i = 0; i < 11; i++) result += Math.Pow(2, i);
高级算法:
int result2 = 0;
for (int i = 0; i < 11; i++) result2 += 1 << i;
运算结果是2047。高级算法的理解:由于底数刚好是2,从二进制01出发,2的n次幂 = 1<<n。这种算法的效率稍高些。追问
如果用while语句来编写,又该怎么写这个程序?
追答int res = 0;
int start = 0;
while (start <= 10)
res += 1 << start;
start++;
a=zeros(11,1);
a(1)=1;
for i=1:10
a(i+1)=2^i;
end
sum(a)
x 的 x 次方等于10,求 x
当 x 的 x 次方为10时,求 x 的值,精确到小数位后9位
过程如下:
2 的 2 次方 小于 10;
3 的 3 次方 大于 10;
因此 x 在 2 到 3 之间。
找出整数部分后,需要计算出小数部分,然后把两部分加到一个串里即可(可以以串的形式输出,也可以转成浮点数输出,下面的程序是以串的形式输出的)。
用试探法来做,过程如下:
小数点后第一位,从 0 开始,加在整数部分后面组成一个新数 y,如果 y 的 y 次方小于 10,把 0 去掉,加上 1,......
依次往下加,直到 y 的 y 次方大于 10,即可确定 x 的小数部分的第一位为当前数字的前一位。
例如:
2.1 的 2.1 次方 小于 10;
2.2 的 2.2 次方 小于 10;
……
2.5 的 2.5 次方 小于 10;
2.6 的 2.6 次方 大于 10;
因此,小数第一位是 5,当前 x 为 2.5……。
同理,即可求出小数部分的第 2 到 9 位。
程序如下:
//2017.03.16 by 迷糊狐狸
public class Test {
static String s = "";
static String f(double d){
for(int i=1; i<d; i++){
if(Math.pow(i, i)>=d){
s = f(9, i-1, d);
break;
}
}
s = s.charAt(0) + "." + s.substring(1);
return s;
}
static String f(int k, int n, double p){
s = s + n;
if(k<=0)return s;
String s1 = s.charAt(0) + "." + s.substring(1);
String s2 = "";
for(int i=1; i<=10; i++){
double d = Double.parseDouble(s1 + i);
if(Math.pow(d, d)>p){
s2 = f(k-1, i-1, p);
s = n + f(k-1, i-1, p);
break;
}
}
s = s2;
return s;
}
public static void main(String[] args) {
String s = f(10);
System.out.println(s);
double d = Double.parseDouble(s);
System.out.println(Math.pow(d, d));
}
}
该程序的后一个输出为检验第一个结果所用。
输出结果如下:
以上是关于编程实现求2的零次方加2的一次方一直加到2的十次方的值的主要内容,如果未能解决你的问题,请参考以下文章