C语言——的士数

C语言——的士数的士数 01 首先是要理解的士数的概念 定义第 n 个的士数 就有 n 种方法的两个数的三次幂的和等于这个数字 比如说第一个的士数是 1 111 111 第二个的士数 1729 111 999 第三个的

大家好,欢迎来到IT知识分享网。

的士数

第二个的士数:

1729 = 111 + 121212
= 999 + 101010

第三个的士数:

= 167167167+ 436439439
= 228228228+ 423423423
= 255255255 + 414414414

。。。。。。。

暴力循环

—————————————————————————

代码:

/* 从键盘输入一个数字,找出所有小于 这个数字的所有的士数 */ #include<stdio.h>  int main() { 
    int num; float key = 1.0; // 用来记录是第几个的士数  float flag; // 控制判断的士数  scanf("%d",&num); int time = 1; for(int i =2; i<num;i++) { 
    flag = key; for(int j = 1; j<i; j++) { 
    for( int n = 1; n< i; n++) // 2.0 16 { 
    if(i == j*j*j + n*n*n) //两个数字相同这样的话,程序只会记一次  { 
    //printf("hello");,这里是执行的  if(n == j) { 
    flag = flag - 1.0; // 控制变成零之后输出 9 //printf(" %f ",flag);  } //printf(" %f ", flag); else // 没有设置是同一个数再相减  { 
    // 导致9的时候flag减了1,之后16的时候就可以输出了  flag = flag - 0.5; //printf(" _%d_%d_ ", j,n);  } //printf(" %f ", flag); } if(flag == 0 ) { 
    if(time == 1) { 
    printf("%d", i); // 输出的士数 time = time + 1; //printf(" _%d_%d_ ", flag);  } else { 
    printf(",%d", i); // 为了控制输出格式  } key = key +1.0; flag = key; // 满足找到key次之后才是的士数  //printf(" %f ", flag); } } } } return 0; } 

改进

这样的循环实在是太长了,优化一下,从循环节的控制上面下手,也就是找到的两个数字其中一个数字的三次方大于原数的话都不会成立,那就从这里下手,控制循环是在1到 pow(i,1.0/3),这样的话可行。改一下就好了。

—————————————————————————

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119925.html

(0)
上一篇 2025-11-02 08:26
下一篇 2025-11-02 08:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信