| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2032 人关注过本帖
标题:求助!找出最大的有由个三位数乘积构成的回文数。
只看楼主 加入收藏
kmj_IT
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2012-3-17
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:12 
求助!找出最大的有由个三位数乘积构成的回文数。
一个回文数指的是从左向右和左右向左读都一样的数字。最大的由两个两位数乘积构成的回文数是9009 = 91 * 99.
 
找出最大的有由个三位数乘积构成的回文数。
下面的代码那里出问题了为什么会无限循环呢?请高手帮忙啊
#include<stdio.h>
#include<stdlib.h>
int fun(int n,int d)
{
int s=0,t=n;
while(t)
{
s=s*d+t%d;
t/=d;
}
return s==n;   
}
void main()
{
int i,j;
int m;
for(i=999;i>100;i--)
{
    for(j=999;j>100;j--)
    {
        m=i*j;
    if(fun(m,10))
    printf("%5d = %5d * %5d",m,i,j);
}   
}
}

[ 本帖最后由 kmj_IT 于 2012-3-21 13:21 编辑 ]
搜索更多相关主题的帖子: 左右 include return 最大的 
2012-03-21 13:02
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
收藏
得分:0 
for(i=999;i>=100;i--)
    for(j=999;j>=100;j--)
2012-03-21 13:12
kmj_IT
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2012-3-17
收藏
得分:0 
回复 2楼 moonnight
嘿嘿,那是我的失误,不过改过来输出还是不对啊
2012-03-21 13:20
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
收藏
得分:0 
你的程序是输出的是所有满足乘积为回文的3位数,不是最大的,如果你要最大的,只需第一次输出后跳出循环就行,我上课去了,代码自己写吧
2012-03-21 13:32
kmj_IT
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2012-3-17
收藏
得分:0 
回复 4楼 moonnight
谢谢提示,我知道哪里错了。。下面是正确的代码
#include<stdio.h>
#include<stdlib.h>
int fun(int n,int d)
{
int s=0,m=n;
while(m)
{
s=s*d+m%d;
m/=d;
}
return s==n;   
}
void main()
{
int i,j;
int m;
for(i=999;i>100;i--)
{
    for(j=999;j>100;j--)
    {
        m=i*j;
    if(fun(m,10))
    {    printf("%5d=%5d*%5d",m,i,j);
        break;
    }

}
            return;
   
}

}


[ 本帖最后由 kmj_IT 于 2012-3-21 18:46 编辑 ]
2012-03-21 16:08
moonnight
Rank: 5Rank: 5
等 级:职业侠客
帖 子:158
专家分:380
注 册:2012-3-17
收藏
得分:0 
你自己验证一下吧!
1.++还没改
2.break只能跳出小循环(j的循环)
2012-03-21 16:11
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
程序代码:
#include <stdio.h>

int hw(int n)
{
    int s = 0, t = n;
    while(n)
    {
        s = (n % 10) + s * 10;
        n /= 10;
    }
    return t == s;
}

int main(void)
{
    int i = 1000, j = 999;
    while(1)
    {
        i--;
       if (hw(i * j)) break;
        j--;
       if (hw(i * j)) break;
    }
    printf("The result is : %d = %d * %d\n", i * j, i, j);

    return 0;
}
836 * 836 = 698896
不知道是不是这个。

梅尚程荀
马谭杨奚







                                                       
2012-03-21 16:13
kmj_IT
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2012-3-17
收藏
得分:0 
回复 6楼 moonnight
可是那个return 语句不是也终止了for(i)循环了吗,i--;j--;确实得改,改完之后,可是为啥没有输出了
2012-03-21 18:56
kmj_IT
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2012-3-17
收藏
得分:0 
回复 7楼 有容就大
我的代码没输出来,不过我看你的也挺对,可答案好像是906609;你还是先帮我看看我的代码错在那了,该怎么改啊。。谢谢啦
2012-03-21 19:20
kmj_IT
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2012-3-17
收藏
得分:0 
回复 7楼 有容就大
哦。。我知道你的错哪里了,你输出的不是最大的,i,j同时减小,所以错过了 906609=993*913
2012-03-21 19:33
快速回复:求助!找出最大的有由个三位数乘积构成的回文数。
数据加载中...
 
   



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

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