| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 939 人关注过本帖
标题:一个k(1 <= k <=80)位的十进制正整数n,我们称其为大整数。现在的问题是,请 ...
只看楼主 加入收藏
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
结帖率:25%
收藏
已结贴  问题点数:10 回复次数:9 
一个k(1 <= k <=80)位的十进制正整数n,我们称其为大整数。现在的问题是,请你设计一个程序,对于给出的某一个大整数,找到满足条件p3+p2
一个k(1 <= k <=80)位的十进制正整数n,我们称其为大整数。现在的问题是,请你设计一个程序,对于给出的某一个大整数,找到满足条件p3+p2+3p <= n的p的最大值。
这道题应该怎么做,大家一起来讨论讨论。是不是用数组来保存大数?如果是,应该怎么求p?如果不是,又怎么求。是不是有什么技巧?

搜索更多相关主题的帖子: 设计 十进制 正整数 
2012-03-16 23:24
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:2 
思考吧丶同学  别人想出来的丶永远不是自己的  培养良好的思考问题的习惯对以后的发展大有好处丶这不难

编程之路定要走完……
2012-03-17 00:25
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 2楼 C_戴忠意
呵呵,我想了很久了,没想出来才发的帖。
2012-03-17 09:04
superliar
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-3-2
收藏
得分:0 
看不太懂
2012-03-17 10:15
w339735126
Rank: 2
等 级:论坛游民
帖 子:18
专家分:24
注 册:2012-3-15
收藏
得分:0 
这个位数有点小多,没编过这么多位数滴。
2012-03-17 10:33
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:2 
http://wenku.baidu.com/view/65b827c68bd63186bcebbc85.html

最基础的往往是你最容易忽略的!
2012-03-17 11:31
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 6楼 于祥
呵呵,谢了啊。
2012-03-17 22:26
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
p3+p2+3p <= n 这个是 p^3 + p^2 + 3 * p <= n
2012-03-17 22:27
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:2 
逐步确认法,打个比方,求sqrt(3)的话,首先确定各位,1^2<3,2^2>3,所以各位是1,

然后小数点后第一位,1.7^2<3,1.8^2>3,所以是7





这样一步一步确定下去,此题类似,细节自己再思考一下
2012-03-17 22:34
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:4 
写了一个,看能不能用
程序代码:
#include <stdio.h>
#include <stdlib.h>

int len,a[100],anslen,ans[100],lenb,b[100],lenc,c[100],tmpanslen,tmpans[100];

void Calculate()
{
     int i,j;
     
     memset(c,0,sizeof(c));
     memcpy(b,ans,sizeof(ans));   lenb=anslen;
     for (i=1; i<=anslen; i++)
       for (j=1; j<=lenb; j++)
       {
           c[i+j-1]+=(ans[i]*b[j]);
           c[i+j]+=(c[i+j-1]/10);
           c[i+j-1]%=10;
     }
     lenc=anslen+lenb;   
     while (c[lenc]==0) lenc--;
     
     memcpy(tmpans,c,sizeof(c));  tmpanslen=lenc;
     
     memset(b,0,sizeof(b));
     for (i=1; i<=anslen; i++)
       for (j=1; j<=lenc; j++)
       {
           b[i+j-1]+=ans[i]*c[j];
           b[i+j]+=b[i+j-1]/10;
           b[i+j-1]%=10;
       }
     lenb=anslen+lenc;
     while (b[lenb]==0) lenb--;
     
     for (i=1; i<=lenb; i++) tmpans[i]+=(b[i]+ans[i]*3);
     tmpanslen=lenb;
     
     for (i=1; i<=tmpanslen; i++)
     {
         tmpans[i+1]+=tmpans[i]/10;
         tmpans[i]%=10;
     }
     if (tmpans[tmpanslen+1]) tmpanslen++;
}

int Biger()
{
    if (tmpanslen>len) return 1; else
    if (tmpanslen<len) return 0;
    
    int i;
    for (i=len; i>=1; i--)
      if (tmpans[i]>a[i]) return 1; else
      if (tmpans[i]<a[i]) return 0;
    
    return 0;
}

int main()
{
    int i,j;
    char c[100];    scanf("%s",c);
    
    len=strlen(c); 
    for (i=len; i>=1; i--) a[i]=c[len-i]-'0';
    
    anslen=len/3+1;
    memset(ans,0,sizeof(ans));
    for (i=anslen; i>=1; i--)
      for (j=0; j<=9; j++)
      {
          ans[i]=j+1;
          Calculate();
          if (Biger()) 
          {
                       ans[i]=j;
                       break;
          }
      }
    
    while (ans[anslen]==0) anslen--;
    for (i=anslen; i>=1; i--) printf("%d",ans[i]);
    printf("\n");
    
    system("pause");
}
    
    
2012-03-18 17:33
快速回复:一个k(1 <= k <=80)位的十进制正整数n,我们称其为大整数。现在的问题是 ...
数据加载中...
 
   



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

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