• 21位水仙花数


    一个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次方之和正好等于这个数本身。

    如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。

    输出样例:
    128468643043731391252
    449177399146038697307

      1 #include<stdio.h>
      2 #include<string.h>
      3 
      4 char a[10][22][22];
      5 char key[21474836][10];
      6 
      7 //两个数字字符串相加 
      8 char* strAddstr(char *s1,int len1,char *s2,int len2)
      9 {
     10     char c[200];
     11     char *s=c;
     12     int i=len1-1,j=len2-1,k=0;
     13     int flag=0;
     14     int sum;
     15     for(;i>=0&&j>=0;i--,j--,k++)
     16     {
     17         sum=(s1[i]-'0')+(s2[j]-'0')+flag;
     18         (flag=sum>9)?(c[k]=sum%10+'0'):(c[k]=sum+'0');
     19     }
     20     for(;i>=0;i--,k++)
     21     {
     22         sum=(s1[i]-'0')+flag;
     23         (flag=sum>9)?(c[k]=sum%10+'0'):(c[k]=sum+'0');
     24     }
     25     for(;j>=0;j--,k++)
     26     {
     27         sum=(s2[j]-'0')+flag;
     28         (flag=sum>9)?(c[k]=sum%10+'0'):(c[k]=sum+'0');
     29     }
     30     if(flag) c[k++]='1';
     31     c[k]=0;
     32     strrev(s);
     33     return s;
     34 }
     35 
     36 void init()
     37 {
     38     int i,j,len;
     39     strcpy(a[1][1],"1");
     40     strcpy(a[2][1],"2097152");
     41     strcpy(a[3][1],"10460353203");
     42     strcpy(a[4][1],"4398046511104");
     43     strcpy(a[5][1],"476837158203125");
     44     strcpy(a[6][1],"21936950640377856");
     45     strcpy(a[7][1],"558545864083284007");
     46     strcpy(a[8][1],"9223372036854775808");
     47     strcpy(a[9][1],"109418989131512359209");
     48     for(i=1;i<=9;i++)
     49         for(j=2,len=strlen(a[i][1]);j<=21;j++)
     50         {
     51             if(i==9&&j==10) break;
     52             strcpy(a[i][j],strAddstr(a[i][j-1],strlen(a[i][j-1]),a[i][1],len));
     53         }
     54 }
     55 
     56 int sum(char *s,char *temp)
     57 {
     58     int i,count[10]={0};
     59     strcpy(temp,"0");
     60     for(i=0;i<21;i++)
     61     {
     62         switch(s[i])
     63         {
     64             case '1':count[1]++;break;
     65             case '2':count[2]++;break;
     66             case '3':count[3]++;break;
     67             case '4':count[4]++;break;
     68             case '5':count[5]++;break;
     69             case '6':count[6]++;break;
     70             case '7':count[7]++;break;
     71             case '8':count[8]++;break;
     72             case '9':count[9]++;break;
     73         }
     74     }//end for
     75     if(count[9]>9)
     76     return 0;
     77     
     78     for(i=1;i<=9;i++)
     79     {
     80         if(count[i])
     81         {    
     82             int len1=strlen(temp);
     83             int len2=strlen(a[i][count[i]]);
     84             strcpy(temp,strAddstr(temp,len1,a[i][count[i]],len2));
     85         }
     86     }
     87     return 1;
     88 }
     89 int main()
     90 {
     91     init();
     92     char temp[22];
     93     int count=0;
     94     char i[22] = "449157399146038697005";
     95     while(count!=2)
     96     {    
     97         for(int j=20;j>=0;j--)
     98         {
     99             if(i[j]!='9')
    100             {
    101                 i[j]+=1;
    102                 break;
    103             }
    104             else
    105                 i[j]='0';
    106         }
    107         if(sum(i,temp)&&strlen(temp)==21&&strcmp(temp,i)==0)//不相等
    108         {
    109             puts(i);
    110             count++;
    111         }
    112     }
    113     getchar();
    114     return 0;
    115 }

    效率很低,需要一个小时左右。仅供参考。

  • 相关阅读:
    05mybatis配置方式简单入门
    04mybatis配置文件lombok组件使用
    03mybatis-注解方式简单入门实例
    01-02 ssm框架简介
    jsp实现文件上传
    新增的语义化标签
    html5与html4的区别
    面向对象总结
    html语法
    购物车总结
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/3057129.html
Copyright © 2020-2023  润新知