| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 854 人关注过本帖
标题:我也闲来无事,研究了一种另类的大数计算方法:题目素材采自c坛子里的 国王 ...
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:2 
我也闲来无事,研究了一种另类的大数计算方法:题目素材采自c坛子里的 国王赏赐宰相的米粒的问题
程序代码:
#include <stdio.h>

//指数运算
_int64 _pow(int base,int p)
{
    int i=0;
    _int64 ret=1;
    if (p==0) return 1;
    for(i=1;i<=p;i++)
    {
        ret=ret*base;
    }
    return ret;
}
//把一个大的_int64拆分成2个小的_int64
void  long2short(_int64 source,_int64* high,_int64* lower)
{
    *lower=source % 1000000000;
    *high=source/1000000000;
}
//判断一个_int64的长度
int longintlen(_int64 source)
{
    int tmp=0;
    while(source>0)
    {
        source/=10;
        tmp++;
    }
    return tmp;
}
//把2个_int64合成一个大的_int64
//目标返回值需要调用者分配内存并初始化'\0'
void  longint2char(_int64 high,_int64 lower,char dest[])
{
    int hlen=longintlen(high);
    int wlen=longintlen(lower);
    while(lower>0)
    {
        dest[hlen+wlen-1]=lower%10+0x30;
        lower/=10;
        wlen--;
    }
    while(high>0)
    {
        dest[hlen-1]=high%10+0x30;
        high/=10;
        hlen--;
    }
}

int main()
{
    int k;
    _int64 sum=0,tmp=0;
    char dest[20]={'\0'};
    for(k=0;k<63;k++)
    {
        tmp=_pow(2,k);
        sum+=tmp;
    }
    _int64 _h,_l;
    long2short(sum,&_h,&_l);
    _int64 _l2=_l*2+1;
    int flag=_l2/1000000000;
    _l2=_l2 % 1000000000;
    _int64 _h2=_h*2+flag;
    longint2char(_h2,_l2,dest);
     printf("%s\n",&dest[0]);
    return 0;
}


最终输出:
F:\c_source\t5\Debug>t5
18446744073709551615    //应该和答案一致
搜索更多相关主题的帖子: include 国王 计算方法 return 
2013-03-24 21:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 外部三电铃
晕,特意百度了一下  才知道  不明觉厉  是啥意思

DO IT YOURSELF !
2013-03-25 08:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用tlliqi在2013-3-25 08:13:03的发言:

好像很厉害的样子
加了好像 2个字  其实就是反义了

DO IT YOURSELF !
2013-03-25 08:14
快速回复:我也闲来无事,研究了一种另类的大数计算方法:题目素材采自c坛子里的 ...
数据加载中...
 
   



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

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