| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 719 人关注过本帖
标题:开贴自己练习,欢迎参与。
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
 问题点数:0 回复次数:4 
开贴自己练习,欢迎参与。
求题贴里的题,拿出来方便点,有兴趣一起练习。


代码设计(满分20分)
    一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
    例如:
    当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
    当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。
    当N=5时,92727满足条件。
    实际上,对N的每个取值,可能有多个数字满足条件。
   
    程序的任务是:求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。
    如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。要求程序在3分钟内运行完毕。
搜索更多相关主题的帖子: 正整数 十进制 水仙花 立方 20分 
2012-01-17 09:53
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 9楼 weipeng1217
你出别人的啦
被我牵出来了

梅尚程荀
马谭杨奚







                                                       
2012-01-17 19:48
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
我对大数运算还很陌生啊。一步一步来,有错的地方还请大家指教。

先做这个: 输入一个个位数,求他的n次方。比如 2的 31次方是2147483648。

上代码:
程序代码:
#include  <stdio.h>

#include  <math.h>

int  main(void)

{
    int n, m, s = 1, i = 0;
   
    int k = 1, j; 

    int  a[100] = { 0 }, b[100] = { 0 };
       
    printf("\nplease input n(1 - 9):");

    scanf("%d", &n);

    printf("\nplease input m:");

    scanf("%d", &m);

    printf("\n");

    a[0] = 1; 

    while (i < m)

    {
        for (j = 0; j <= k ; j ++)

        {
            s = a[j] * n;

            if ((s + b[j]) < 10)

            a[j] = s + b[j];

           else
           
           { 
              a[j] = (s + b[j])  % 10;
             
              b[j + 1] = (s + b[j])  / 10;   
   
           }
        
          
        }

        if (a[--j])  k++;

        for (j = 0; j <= k; j++)

            b[j] = 0;

        i++;
    }

    for (j = k - 1; j >= 0; j--)

        printf("%d", a[j]);

    printf("\n\n");

    return  0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册
         
图片附件: 游客没有浏览图片的权限,请 登录注册


发现写的这个程序能做两位数之内的,到三位数就不行了
 
图片附件: 游客没有浏览图片的权限,请 登录注册
               
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 有容就大 于 2012-1-17 20:01 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-17 20:00
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
下把争取把输入任意正整数求其任意正整数次方,写出来。哇咔咔,很难想象大数的大数次方是多少啊。

梅尚程荀
马谭杨奚







                                                       
2012-01-17 21:55
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
程序代码:
#include  <stdio.h>

#include  <math.h>

#include  <string.h>

#define  N 10001

int  main(void)

{
    char  a1[N];

    int   a2[N], b[N], c[N] = { 0 }, d[N] = { 0 };

    int   n, m, i, j = 0, k;

    int   len, len1, mul;

    printf("Please  input a string a1:");

    gets(a1);

    len = strlen(a1);

    for (i = 0; i < len; i++)

    {
        if (a1[i] < 48 || a1[i] > 57)

        {

            printf("Illegal input !\n");

            printf("Enter again:");

            gets(a1);

            break;
        }
    }

    printf("\n");

    for (i = len - 1; i >= 0; i--)

    {
         b[j] = a2[j] = a1[i] - 48;

         printf("%d", b[j]);   j++;
    }

    printf("\n\nPlease input m:");

    scanf("%d", &m);

    len1 = len;

    while (m - 1)

    {

       for (i = 0; i < len; i++)

    {
            k = i;

        for (j = 0; j < len1; j++)

        {
            mul = b[i] * a2[j] ;     

               if (mul + c[k] + d[k] > 9)

               {
                  c[k + 1] = (mul + c[k] + d[k]) / 10;
               
                  d[k] = (mul + c[k]  + d[k]) % 10;
               }

               else 

                d[k] = mul + c[k] + d[k];

               k++;

        }

        d[k] = c[k];
       
        for (j = 0; j <= k; j++)

            c[j] = 0;
       
    }



        len1 = k + 1;
   
        for (j = 0; j <= len1; j++)

        {
            a2[j] = d[j];

            d[j] = 0;
        }

    m--;

    }

    printf("\n");

    for (i = len1 ; i >= 0; i--)

    {
           
        if (a2[i])
           
        {
            j = i;  break;
        }

    }

        for (i = j; i >= 0; i--)

                printf("%d", a2[i]);    

    printf("\n\n");

    printf("Please input n & m:");

    scanf("%d%d", &n, &m);

    printf("\n\n%f\n\n", pow(n, m));

    return    0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册


哈哈

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 有容就大 于 2012-1-19 07:28 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-19 07:23
快速回复:开贴自己练习,欢迎参与。
数据加载中...
 
   



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

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