一段C语言的代码问题,运行得不到我要的结果,很苦恼。

2.编写程序求出满足下列条件的四位数:

(1)该数是个完全平方数;

(2)千位、十位数字之和为10且百位、个位数字之积为12。

要求每一行显示5个数,并且统计满足条件的数字个数。

下面是我的代码:
#include
#include
int main()
{
int m,n,qw,bw,sw,gw,sum=0;
for(m=1000;m<=9999;m++)
{
for(n=32;n<=99;n++)
{
if(m==n*n)
break;
else
continue;
}
if(n<100)
{
qw=m/1000;
bw=(m%1000)/100;
sw=(m%100)/10;
gw=m%10;
if(qw+sw==10&&bw+gw==12)
{
printf("%6d",m);
sum+=1;
if(sum%5==0)
printf("\n");
}

}
else 
continue;

}
printf("\n");
printf("满足条件的数字个数有%d",sum);
return 0;
}

运行结果是:满足条件的数字个数有0,当然这是错误的,求在行的同志们帮帮忙!

11个回答

突然发现是因为百位和个位题目要求乘起来是12,不是加,好尴尬。然后运行成功了!但是有个问题,就是我这种方法运行很慢,请问有没有运行起来比较快的更好的算法呢?

头文件没有复制好,这个请跳过。

设这个数是DCBA,它是完全平方数,设它的根 为 dcba ,(个位数) a可以是 0~9,因为A和百位数之积为12,A为1~9,也就是说,A只能1、4、5、6、9。
所以百位和个位只存在 两组情况 {C= 3 , A = 4} 、{C=2,A=6};
而千位和十位只存在9种情况(D,C)= (1,9)、(2,8)、(3,7)、(4,6)、(5,5)、(6,4)、(7,3)、(8,2)、(9,1)

一共才2*9 = 18种情况,直接穷举,会很快。

 //2.编写程序求出满足下列条件的四位数:
//(1)该数是个完全平方数;
//(2)千位、十位数字之和为10且百位、个位数字之积为12。
//要求每一行显示5个数,并且统计满足条件的数字个数。

/*
设这个数是DCBA,它是完全平方数,设它的根 为 dcba ,(个位数) a可以是 0~9,因为A和百位数之积为12,A为1~9,也就是说,A只能1、4、5、6、9。
所以百位和个位只存在 两组情况 {C= 3 , A = 4} 、{C=2,A=6};
而千位和十位只存在9种情况(D,B)= (1,9)、(2,8)、(3,7)、(4,6)、(5,5)、(6,4)、(7,3)、(8,2)、(9,1)

一共才2*9  = 18种情况,直接穷举,会很快。
Num[18] = {1394,2384,3374,4364,5354,6344,7334,8324,9314,1296,2286,3276,4266,5256,6246,7236,8226,9216};

*/ 
//#include <stdafx.h>
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int Num[18] = {1394,2384,3374,4364,5354,6344,7334,8324,9314,1296,2286,3276,4266,5256,6246,7236,8226,9216};
int main()
{
    int i = 0,count = 0;
    double x = 0;
    for (i=0;i<18;i++)
    {
        x = sqrt(Num[i]);//开平方求根 
        if(x == (int)x)//判断是否是完全开尽 
        {
            count++;
            if(count % 5 == 0)
            {
                printf("\n");
            }
            printf("%d,",Num[i]);
        }
    }
    printf("\n count = %d",count);  
    getchar();
    return 0;
}

图片说明

x_xx_xxx_xxxx
x_xx_xxx_xxxx 回复?????????(???????)??: DCBA是完全平方数,A可能的值,是由a决定。a可以是 0~9. 0*0 =0A 只能是由 a*a 得到,对吧。 0*0=0; 1*1=1; 2*2=4; 3*3=9; 4*4=16 个位数也是6 5*5=25 个位数也是5 6*6=36 个位数也是6 7*7=49 个位数也是9 8*8=64 个位数也是4 9*9=81 个位数也是1 总结下来,个位数只能是 0、1、4、5、6、9. 所以尾数是2、3的情况不存在。
大约 2 年之前 回复
x_xx_xxx_xxxx
x_xx_xxx_xxxx 回复?????????(???????)??: 你好。我具体来解释一下。设这个数是DCBA,它是完全平方数,设它的根 为 dcba (d、c、有可能为0)。
大约 2 年之前 回复
qq_37225432
qq_37225432 我觉得不是18种可能,是36种,你把百位和各位的可能性算少了,(3,4),(4,3),(2,6),(6,2)
大约 2 年之前 回复

楼主,by the way,把一些大数定义成在main 函数外面,不会占用运行时间,只占编译时间。
处理大的菲波那切数列时,可以先私下运行出一万个、两万个数之后的值,输出到文本中,然后把这些值copy下来再定义在mian 函数外,需要的时候直接去取,省去很多计算,程序会加快很多。这是一种小窍门吧。如果你是在校生,鼓励你多参加编程,参加ACM,对以后会有很大好处。

你好。我具体来解释一下。设这个数是DCBA,它是完全平方数,设它的根 为 dcba (d、c、有可能为0)。
DCBA是完全平方数,A可能的值,是由a决定。a可以是 0~9. 0*0 =0A 只能是由 a*a 得到,对吧。
A 只能是由 a*a 得到,对吧。
0*0=0;
1*1=1;
2*2=4;
3*3=9;
4*4=16 个位数也是6
5*5=25 个位数也是5
6*6=36 个位数也是6
7*7=49 个位数也是9
8*8=64 个位数也是4
9*9=81 个位数也是1
总结下来,个位数只能是 0、1、4、5、6、9.
所以尾数是2、3的情况不存在。

其实,你也可以把你说的 36种写上,试试,不是吗?

我举个栗子吧,你知道斐波那契数列数列吗?它是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。OK,那咱们继续。请编写一个程序,程序会先输入一个值n,请输出F(n).
程序输入n;
程序输出 F(n);
(n>=2,n∈N* , n∈(2,30000))

示例:
输入 : 2
输出 : 2

示例2:
输入 : 6
输出 : 13

这道题是一个很基础的题,我先不说解法,你自己试试自己的思路,写好之后,看看能不能优化。

qq_37225432
qq_37225432 然后我发现n应该是可以输入从2-30000,但是到n=45之后,就会超出无符号长整形的范围。这要怎么办哪
大约 2 年之前 回复
qq_37225432
qq_37225432 #include<stdio.h> int main(){ int a=1,b=1; long int c; int n; int i; do{printf("请输入n的值:"); scanf("%d",&n); printf("\n"); }while(n<2||n>30000); for(i=2;i<=n;i++) {c=a+b; a=b; b=c;} printf("输出第%d个斐波那契数列值为%ld\n",n,c); return 0; } 运行结果和你的要求是一致的,但是优化,没有想法。
大约 2 年之前 回复

没关系,想想解决方案。输出不一定要用 long 啊!Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647,也就是-2^16 ~ 2^16-1. 菲波那切数列很快就会超了这个范围。先不要想着效率,先解决第一个问题,破开溢出的问题。想一想,那些输出是范围最大的?

嗯嗯,你很聪明嘛!而且一定也下功夫思考了!
不过,double 也不合适 ~ 你再考虑考虑。
C 中 double -1.7*10^-308~1.7*10^308
long double -1.2*10^-4932~1.2*10^4932

也就是说,最多支持4932位的数。斐波那契 数列的增长速度近乎指数级,过万,就会超过4932位了。你想一想,是不是这样?
给你两个小提示:
1.不要把思维局限在 long 、double 这些数值型输出,这仅是输出格式而已,最终体现出来都是一样。
2.你需要自己造轮子,制作小工具。

你好,楼主,我太想当然了。我试了一下,2^10 约 等于 10^3,也就是说,斐波那契数列第1000位约有300 位数。
10000位大概有3000位数。

图片说明

long double 也是只能支持 第 23600 位斐波那契。你再考虑考虑~
图片说明

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!