| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2274 人关注过本帖
标题:C语言 的溢出问题
只看楼主 加入收藏
雨夜梧桐
Rank: 2
等 级:论坛游民
帖 子:63
专家分:89
注 册:2010-6-4
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:9 
C语言 的溢出问题

编程精确计算2的N次方。(N是介于100和1000之间的整数)。


输入


正整数N (100≤N≤1000)


输出


2的N次方

这个怎么做啊?溢出 怎么解决呀?有谁知道的,帮我看看吧。
搜索更多相关主题的帖子: C语言 
2011-07-21 16:26
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:2 
  可以用二进制表示或者用浮点数,pow(2,N);或者用字符数组存
2011-07-21 18:11
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
2的N次方相当于把1往左移多少位,很容易表达。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-07-21 18:22
为我留住记忆
Rank: 4
来 自:北京
等 级:业余侠客
帖 子:130
专家分:226
注 册:2011-4-30
收藏
得分:2 
因该可以用字符串的形式表示出来。。。只要后面减去\0就可以

学习c是为了自己更强大。。。
2011-07-21 18:34
雨夜梧桐
Rank: 2
等 级:论坛游民
帖 子:63
专家分:89
注 册:2010-6-4
收藏
得分:0 
回复 2楼 loveshuang
N相当大的了呀。
2011-07-21 18:45
雨夜梧桐
Rank: 2
等 级:论坛游民
帖 子:63
专家分:89
注 册:2010-6-4
收藏
得分:0 
回复 4楼 为我留住记忆
你能说说具体的算法吗?
2011-07-21 18:45
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:2 
程序代码:
int a[5000]={0};
void f()
{int i;
for(i=5000-1;i>=0;i--)
if(a[i]>9)
{a[i-1]+=a[i]/10;
a[i]%=10;}}
main()
{int i,n;
a[5000-1]=2,n=10000;
n--;
while(n>0)
{for(i=4999;i>=0;i--)
a[i]=a[i]*2;
n--;
f();
}
i=0;
while(!a[i])i++;
for(;i<5000;i++)
printf("%d",a[i]);
printf("\n");
getch();}
2011-07-21 20:17
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:2 
楼主用Python吧,几乎不用考虑溢出的问题。。。

My life is brilliant
2011-07-21 20:35
雨夜梧桐
Rank: 2
等 级:论坛游民
帖 子:63
专家分:89
注 册:2010-6-4
收藏
得分:0 
回复 7楼 hjywyj
谢谢。
2011-07-22 09:28
雨夜梧桐
Rank: 2
等 级:论坛游民
帖 子:63
专家分:89
注 册:2010-6-4
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<malloc.h>
int i=1;
void double_(int n)
{
    int *p,*q,j,s,jw=0;
    p=(int *)malloc(sizeof(int));
    *p=1;
    for(j=1;j<=n;j++)
    {
        jw=0;
        for(s=0;s<i-1;s++)
        {
            if((*(p+s)*2+jw)>=10)
            {
                *(p+s)=(*(p+s))*2+jw-10;
                jw=1;
            }
            else
            {
                *(p+s)=(*(p+s))*2+jw;
                jw=0;
            }
        }
        if((*(p+s)*2+jw)>=10)
        {
            i+=1;
            q=p+i-1;
            q=(int *)malloc(sizeof(int));
            *(p+i-1)=1;
            *(p+s)=(*(p+s))*2+jw-10;
        }
        else *(p+s)=(*(p+s))*2+jw;
    }
    for(j=i;j>=1;j--)
        printf("%d",*(p+j-1));
    printf("\n");
}
void main()
{
    int n;
    scanf("%d",&n);
    double_(n);
}
2011-07-22 10:31
快速回复:C语言 的溢出问题
数据加载中...
 
   



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

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