21位花朵数

#include"stdio.h"
#include<math.h>
main()
{

int q[21],p[21],j,n,w,o,s;
double sum1,sum2;
long int i;
A:
printf("请输入数的位数:\n");
scanf("%d",&w);
for (i=pow(10,w-1),o=pow(10,w)-1;i+1!=o;i++,o--)
{
for (j=0,n=i,s=o;j<w;j++)
{
q[w-1-j]=n%10;
n=n/10;

p[w-1-j]=s%10;
s=s/10;

}

for (sum1=sum2=0,j=0;j<w;j++)
{
sum1+=( double ) pow(q[j],w);
sum2+=( double ) pow(p[j],w);
if (sum1==i)
{
printf("%d\n",i);
}

if (sum2==o)
{
printf("%d\n",o);
}

}

}

}

你们有没有其他方法?求教

时间: 2024-10-03 22:51:56

21位花朵数的相关文章

21位花朵数(详解)

转载自http://www.cnblogs.com/hsqdboke/archive/2012/04/14/2447079.html#3306648 ~~ 转载请注明出处^^ 今天看到了,蓝桥杯上面的一道题,求21位花朵数,题目是: l  (编程题)花朵数 一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数. 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5

21位水仙花数(花朵数 )

问题就不描述了,简单说下思路. 思路:(1)暴力枚举21位数,然后一个个的计算,虽然能解,但是,时间不允许的. (2)枚举  0 -9 这10个数子在这个21位数中出现的次数.得到一种解后,再计算出这个21位数,然后与原来得到的解对比,看看0 - 9出现的次数是否一样,是,这个21位数就是一个解.用时不到30s. AC代码: import java.math.BigInteger; /*21位水仙花数 * 枚举每个数字出现的次数 * */ public class T08 { //记录0 - 9

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

输入n,按顺序打印1到最大的n位十进制数

1 /* 2 *题目要求:输入n,按顺序打印1到最大的n位十进制数 3 *比如:输入3,则打印1,2,...999 4 *更新日期:2015-06-15 5 */ 6 7 //注意题目中的陷阱,当n稍微大一点的时候会溢出,所以使用字符串输出的策略 8 9 #include<iostream> 10 using namespace std; 11 12 void 13 Print_number_byte(unsigned char num) 14 { 15 if(num<1)return

判断一个数(小于10位)的位数。输入999,则输出 “它是个3位的数!”

判断一个数(小于10位)的位数. 输入999,则输出 “它是个3位的数!” -------------------------------------------------------------------------- public class HelloWorld{public static void main(String[] args){int num = 999;int count = 0; if (num >= 0  && num<=999999999){ wh

打印出从1到最大的n位十进制数,如输入3 打印 1到 999

打印出从1到最大的n位十进制数,如输入3  打印 1到 999 分析: 可能很多人想到直接求出  10的 n次方  ,然后从1打印到该数.这种情况只适合输入比较小的数字  如  1   2    3   4   5  但是当输入100时,肯定无法直接表示该数. 所以,用数组是一个不错的方法   number[n] 换种思路,n位所有十进制数其实就是n个0-9的数全排列的过程,只是排在前面的0我们不打印出来. 类似于树的深度遍历,树的深度为10层,先从第一层遍历到最后一层   ,当最后一层的所有可

hdu 3183 A Magic Lamp(给一个n位的数,从中删去m个数字,使得剩下的数字组成的数最小(顺序不能变),然后输出)

1.题目大意是,给你一个1000位的数,要你删掉m个为,求结果最小数. 思路:在n个位里面删除m个位,也就是找出n-m个位组成最小数 所以在区间 [0, m]里面找最小的数,对应的下标标号i 接着找区间 [i+1,m++]里面的最小数,对于下标为ii 接着找区间 [ii+1,m++]里面的最小数-- 这样就会找n-m个数了.区间这样安排的目的是为了保证取出来的数的顺序. 2代码: #include<cstdio> #include<cstring> #include<cmat

已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。

描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 输出M行,每行为对应行的n-1位数(忽略前缀0).如果除了最高位外,其余位都为0,则输出0. 样例输入 4 1023 5923 923 1000 样例输出 23 923 23 0我的程序: #include<iostream>#include<vector>#include<cmat

将给定的数转换为指定位的数

/*** 将给定的数转换为指定位的数* @param maxmum 最大位* @param minmum 最小位* @param num 返回转换后的数* @return*/public String formatNum(int maxmum,int minmum,int num){ NumberFormat nf = NumberFormat.getInstance();  nf.setGroupingUsed(false);// 设置此格式中是否使用分组. nf.setMaximumInte