比如1060=2的2次方+2的5次方+2的10次方
67601=2的0次方+2的4次方+2的11次方+2的16次方
现在我知道一个数值67601,
求一个算法,算出该值是由哪几个2的几次方相加得到的(即等式中标红的数字。数字个数不确定,但应该是唯一的)。
var v = 67601;
var s = Convert.ToString(v, 2);
for (int i=s.Length-1, n=0; i>=0; i--, n++)
{
if(s[i] == '1') Console.Write("{0} ", n);
}
static void Main(string[] args)
{
int[] list=new int[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
foreach (var item in list)
{
var i = output(item).ToList();
string str = item.ToString() + "=";
str = str + string.Join("+", i.Select((p, index) => new { p, index }).Where(p => p.p == 1).Select(p => string.Format("2的{0}次方", p.index)));
Console.WriteLine(str);
}
Console.ReadKey();
}
static IEnumerable<int> output(int i)
{
if (i == 0) yield return 0;
while (i > 0)
{ yield return i & 1;
i = i >> 1;
}
}
var v = 67601;
var m = 0x80000000;
var w = 31;
while (m > 0)
{
if ((v & m) > 0) Console.Write("{0} ", w);
w--;
m >>= 1;
}
private static IEnumerable<int> N进制(int n, int toBase)
{
var cnt = 0;
begin:
if (n % toBase == 1)
yield return cnt;
n /= toBase;
++cnt;
goto begin;
}
foreach (var x in N进制(67601, 3))
Console.WriteLine(x);
power就是函数,返回值为2的n次方的结果,只适用于大于等于0 的int型数据. int power(int n) { int m = 1; m = m << n; return m; } 基本操作就是向左移动一位就是相当于乘2,移动两位相当于乘4.当然向右...
无意中接触到这个算法,仔细琢磨一番,很有意思,非常之快。我先把符合题目要求的结果定义为最佳匹配值。#define B_SHIFT 4 /*第0步*/static int getBinBlockSize(int size){ int q; size = size >> B_SHIFT;...
如果一个数是2^n,说明这个二进制里面只有一个1。除了1. a= (10000)b a-1 = (01111)b a&(a-1) = 0。 如果一个数不是2^n, 说明它的二进制里含有多一个1。 a = (1xxx100)b a-1=(1xxx011)b 那么a&(a...
public class Pow { /** * 求x^n 时间复杂度O(log(n)) * @param x * @param n * @return */ public static long pow(int x,int n){ System.out.println("************"); ...
举个求整数的n次方的例子(Go语言版): ``` go func pow(x, n int) int { ret := 1 // 结果初始为0次方的值,整数0次方为1。如果是矩阵,则为单元矩阵。 for n != 0 { if n%2 != 0 { ret = ret * x } n /=...
实现 pow(x, n) ,即计算 x 的 n 次幂函数。 1.暴力破解法 2.快速幂法(利用幂的特性) public class MyPow { public static double myPow(double x, int n) { long N = n; if (N < 0){ N = -N; x = 1/x...
该算法求某个数的n次方的时间复杂度只有logN,我们平时使用的循环求时间复杂度为o(n)int power(int x,int n) { int m=0; m=n; int t=1; while(m>0) { m/=2; t*=2; } m=n; int y=1; while(t>...
=100),计算2的n次方的值。 输入: 输入一个正整数N。 输出: 输出2的N次方的值。 样例输入: 5 样例输出: 32 核心思想: 计算2的n次方也是依次相乘2,大于个位则进位,从后向前保存元素,所以要令...
[Python] 2的N次方 题目描述 对于一个整数N(512 <= N <= 1024),计算2的N次方并在屏幕显示十进制结果。 输入描述 输入一个整数N(512 <= N <= 1024) 输出描述 2的N次方的十进制结果 示例 输入 512 ...
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 设要判断的数是无符号整数X。 首先判断X是否为0,如果为0则不是2的n次幂,返回。 ...
//计算2的n次方,创建数组赋予足够大的空间,使用for循环执行n次,如果a[i]>9则a[i]取%10,a[i+1]++,计算n次循环,计算完毕由高到低输出数组 void main() { int i; int j; int a [400];//赋予数组足够大的空间...
输入a,n,求a的n次方,a可以是小数; 源码: import java.util.Scanner; public static double fun(double a,int n) { if(n==1) return a; if(n==0) return 1; if(n%2==0) return fun(a,n/2)*...
求X的N次方:方法1:直接用库函数double pow( double base, double exp )。方法2:非递归求解。方法3:递归求解。
//判断一个数是否是2的n次方 public boolean isPower(int n){ if(n<1){ return false; } int i=1; while(i<=n){ if(i==n){ return true; } i<<=1; ...
数据结构递归算法-高效求解x的n次方(C语言实现) 目录数据结构递归算法-高效求解x的n次方(C语言实现)参数极端情况导出极端过程操作源代码 这个问题非常类似递归求解斐波那契数列,但该比之简单一点,首先把问题代...
package com.test; public class Power { public static void main(String[] args) { System.out.print("Hello, \r\n"); System.out.print(power2(3, 2) + "\r\n"); System....
2的N次方,你将如何判定?
求一个数的平方根,用牛顿迭代法实现。 def p(x): pre,res=0.0,1.0 while abs(pre-res)>0.00001: pre=res res=(res+x/res)/2 ...求一个数的n次方,时间复杂度为O(logn) def power(x,n): if not n: ...
1 x的n次方 递归实现 #include <stdio.h> #include <stdlib.h> //递归解决n的k次方 int f(int x,int n){ if(n==0){ return 1; } else return x*f(x,n-1); } int main() { int x; int n; ...
python表示2的n次方:2**n i=5 a=2**i print a 结果为:32
现有3的7次方,7=1+2+4,则7的二进制位0111,7右移一位是相当于除以2,依次右移相当于除以4,8,也就是说3的2次方,3的4次方,等等。如果幂为奇数,则每次多乘一次底数。 public class PowMofN { public static...
如果 n 是偶数,可以分为 (an/2)*(an/2) 算法复杂度基本降低一半 如果 n 是奇数,可以分为(an/2)*(an/2)*a 算法复杂度也基本降低一半 如果 n == 1 ,则直接返回 a 代码实现: #include<stdio.h> #include&...
对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,...
源代码如下 #include using namespace std; float pow(float a, int n) { float s; if (n <= 0) s = 1; else s = pow(a, n)*a; return s; } int main() { ... “分别输入底和次方数”; cin ...
计算一个数的N次方时,我们先设定两个参数n和k,n表示你要输入的数,k表示这个数的次方。 这个时候我们必须对次方数k作出分类:{ k=0:return 1;
设计一个算法,求解a的n次幂问题。 输入描述 输入一行两个正整数a,n,分别表示底数与指数 输出描述 输出一个整数,表示a的n次幂 输入样例 2 15 输出样例 32768 参考代码 朴素算法 #include<stdio.h> long long...
求a的n次方,要求快速算法。 求一个数的n(n是int型正整数)次方,比较简单的题目,但是也有比较大的优化空间。 图片是求a的n次方的公式。 如果n是偶数、.....如果n是奇数、..... 可以看出是一个递推公式的...
我们知道C++中是有pow函数的,我们这次自己来写个,因为有这样的算法题目。...这还不简单,马上写一个for循环: double pow(double x, int n){ int m = abs(n); double result = 1; for(int i = 0; i
题目求n的m次方,n,m均为自然数。解析看似简单的题目,但是要想写的高效还不是那么容易想出来。实现unsigned int power(unsigned int a, unsigned int n) { unsigned int i, s; if (!n) return 1; if(!a) return...
a的n此快速算法,N*N个位数是多少