| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 580 人关注过本帖
标题:闲来无事,散散分 也期望闲来无事的大侠们进来水水
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:5 
闲来无事,散散分 也期望闲来无事的大侠们进来水水
程序代码:
#include <stdio.h>
#include <malloc.h>

//把一个正整数分解为2^n+
void mi(int s,int* t,int* len)
{
    int i=0;
    for(;s>0;i++)
    {
        *(t+i)=s & 1;
        s>>=1;
    }
    *len=i;
}
//使用移位计算等差数列之和
int w_add(int begin,int* t,int end)
{
    int k=begin+end;
    int j=end-begin+1;
    int m=k;
    int sum=0;
    int len=0;
    mi(j,t,&len);
    for(int i=0,k=m;i<len;i++) if(*(t+i)) sum+=k<<i;
    return sum>>=1;
}
//测试部分
int main()
{
    int a=1234;
    int b=9876;
     int* t;
    t=(int*)malloc(sizeof(int)*32);
    int s=w_add(a,t,b);
    printf("%d+......+%d=%d\n",a,b,s);
    free(t);
    return 0;
}


[此贴子已经被作者于2015-10-30 13:50编辑过]

2015-10-30 13:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 2楼 embed_xuel
要多少分 哥有   嘿嘿

DO IT YOURSELF !
2015-10-30 13:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 rjsp
谢谢了

我目前接触到的电脑就是32位为最高  64位的尚未接触过的

DO IT YOURSELF !
2015-10-30 15:27
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 5楼 rjsp
我再研究研究  你的代码属于位运算的复杂应用了  一时半会还弄不透彻

DO IT YOURSELF !
2015-10-30 15:29
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
原来1<<i 会获得2^i 这么神奇

DO IT YOURSELF !
2015-10-30 15:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    const int a = 1234;
    const int b = 9876;

    int sum = 0;
    {
        int i;
        for( i=0; i!=sizeof(sum)*8; ++i )
            if( (b-a+1) & (1<<i) )
                sum += (a+b)<<i;
        sum /= 2;
    }
    printf( "%d+......+%d = %d\n", a, b, sum );

    return 0;
}




"a.c" 28L, 334C


unix下编译通过运行

DO IT YOURSELF !
2015-10-31 08:11
快速回复:闲来无事,散散分 也期望闲来无事的大侠们进来水水
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017013 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved