| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖
标题:一个简单的程序,大家帮我看看
只看楼主 加入收藏
as1069
Rank: 2
来 自:河北
等 级:论坛游民
威 望:1
帖 子:46
专家分:31
注 册:2014-6-10
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:9 
一个简单的程序,大家帮我看看

/*
如果有一个正整数从左、右来读都是一样的,则成为回数;比如101、32123、999都是回数。
回数猜想:任取一个数,再把它倒过来,并把这两个数相加,然后把这个和数在倒过来,与原和数相加,重复此过程一定能获得一个和数。
68,,,86;
68+86=154;
154+541=605;
605+506=1111;
编程,输入任意整数,按上述 步骤产生一个回数,最多计算七步,看是否得到一个回数;;
//
*/
#include<stdio.h>
main()
{
    int x, y, m, n, q, a, b;
    int f(x);
    int h(x);
    scanf("输入一个两位数%d",&x);
    for(n=1;n>7||q=1;n++)//错误的地方
    {
        a=f(a);//求倒数
        b=a+b;
        q=h(b);//判断是否为合数
    }
    printf("合数是%d,次数为%d",b,n);
}
int f(x)
{
    int a, b, c, d, e, y;//这些是局部变量应该与上面的不冲突  请教大神
    a=x/10000;
    b=x/1000-a*10;
    c=x/100-a*100-b*10;
    d=x/10-a*1000-b*100-c*10;
    e=x-a*10000-b*1000-c*100-d*10;
    y=e*10000+d*1000+c*100+b*10+a;
    return(y);
}
int h(x)
{
    int a, b, c, d, e, q;
    int l, o, p;
    a=x/10000;
    b=x/1000-a*10;
    c=x/100-a*100-b*10;
    d=x/10-a*1000-b*100-c*10;
    e=x-a*10000-b*1000-c*100-d*10;
    if(a==e&&b==d)//这里会出错   打算用switch语句不太会
        l=1;
    if(b==e&&c==d&&a==0)
        o=1;
    if(c==e&&a==b==0)
        p=1;
    if(l==1||o==1||p==1)
        q=1;
    return(q);
}
//请大家帮忙改进一下    谢谢了

搜索更多相关主题的帖子: include 正整数 
2015-11-12 16:51
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:5 
程序代码:
#include<stdio.h>
int f(int n,int &s){
    if(n>0){
        s=10*s+n%10;
        f(n/10,s);
    }
}
bool isOver(int n){
    int m=0;
    f(n,m);
    return n==m;
}
main(){
    int n=68,m=0,count=0;
    do{
        n=n+m;
        m=0;
        f(n,m);    
        count++;
        printf("第%d趟,%d+%d=%d\n",count,n,m,n+m);
    }while(!isOver(n+m)&&count<=7);
    printf("总次数:%d,回数:%d",count,n+m);
}

同样的问题问了两遍,答案再给你贴一遍
https://bbs.bccn.net/thread-459039-1-1.html

剑栈风樯各苦辛,别时冰雪到时春
2015-11-12 16:59
as1069
Rank: 2
来 自:河北
等 级:论坛游民
威 望:1
帖 子:46
专家分:31
注 册:2014-6-10
收藏
得分:0 
首先你这个编译不成功    不符合要求
我看不懂
int f(int n,int &s)这个&是什么
if(n>0){
        s=10*s+n%10;
        f(n/10,s);这样循环可以    数字再大一些就出错了
    }



bool isOver(int n){
    int m=0;
    f(n,m);
    return n==m;两个等号是什么意思


int n=68,m=0,count=0;这只是一个数    我想输入任意数但不会只好五位数以下


我已入坑
2015-11-12 17:16
as1069
Rank: 2
来 自:河北
等 级:论坛游民
威 望:1
帖 子:46
专家分:31
注 册:2014-6-10
收藏
得分:0 
我只是想看看这程序哪里错了
帮忙看看   提提意见

我已入坑
2015-11-12 17:18
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
首先我的编译成功,两个等号。。。恩我搜一下再告诉你啊

剑栈风樯各苦辛,别时冰雪到时春
2015-11-12 18:09
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
收藏
得分:5 
楼主
scanf("输入一个两位数%d",&x);
     for(n=1;n>7||q=1;n++)//错误的地方
    {
         a=f(a);//求倒数

f(a)中的a从何出来?
还有
for(n=1;n>7||q==1;n++)

另外
 a=x/10000;
     b=x/1000-a*10;
     c=x/100-a*100-b*10;
     d=x/10-a*1000-b*100-c*10;
     e=x-a*10000-b*1000-c*100-d*10;
     y=e*10000+d*1000+c*100+b*10+a;
     return(y);
加入输入12,按你的算法,第一次倒过来是21000。
所以本程序的算法是错的,建议楼主重新思考,

[此贴子已经被作者于2015-11-12 19:02编辑过]

2015-11-12 18:44
丁松
Rank: 2
来 自:重庆
等 级:论坛游民
威 望:1
帖 子:41
专家分:75
注 册:2015-11-11
收藏
得分:5 
回复 楼主 as1069
#include<stdio.h>
void f(int n,int &s){
    if(n>0){
        s=10*s+n%10;
        f(n/10,s);
    }
}
bool isOver(int n){
    int m=0;
    f(n,m);
    return n==m;
}
void main(){
    int n,m=0,count=1;
    printf("请任意输入一个整数:\n");
    scanf("%d",&n);
    do{
        n=n+m;
        m=0;
        f(n,m);
        printf("第%d趟:%d+%d=%d\n",count,n,m,n+m);   
        count++;
    }while(!isOver(n+m)&&count<=7);
    if(count<=7)
    printf("总次数:%d\n该回数为:%d\n",count,n+m);
    else
        printf("计算已达到七次,未能得到回数\n");
}
2015-11-12 19:45
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
回复 7楼 丁松
鹦鹉学舌,数据、字符串逆序都是最基础的,不应该有提问,判断回文数简单代码如下:
程序代码:
#include<stdio.h>
int testrsv(int n)
{
    int i,j;
    for(i=n,j=0;i>0;i/=10)j=j*10+i%10;
    return j==n;
}
void main()
{
    int n;
    printf("输入测试数据(任意字母退出测试):");
    while(scanf("%d",&n))
    {
        if(testrsv(n))printf("%d是回文数\n",n);
        else printf("%d不是回文数\n",n);
        printf("输入测试数据(任意字母退出测试):");
    }
}

能编个毛线衣吗?
2015-11-12 20:21
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
收藏
得分:0 
楼主试试这个,代码较少。
#include <stdio.h>
#include <math.h>
int fac(int x);
int flag=0;
void main()
{
    int m,n,i;
    printf("输入一个数m:\n");
      scanf("%d",&m);
    for(i=1;i<7&&flag==0;i++)
    {
        n=fac(m);
       m=n+m;
    }
    printf("%d\n",n);

}  
int fac(int x)
{
    int n,m,q,p,k,y=0,a;
    m=x;
    for(n=0;n<10;n++)
    {
        p=(int)pow(10,n);
        q=(int)pow(10,n+1);
        if(p<=x&&x<=q)   
        break;
    }
    for(k=0;k<=n;k++)
    {
        a=x%10;
        x=(x-a)/10;
        y=y+a*pow(10,n-k);
   
    }   
    if(y==m)
    flag=1;
    return (y);
}


[此贴子已经被作者于2015-11-12 20:34编辑过]

2015-11-12 20:22
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用原以为在2015-11-12 20:22:20的发言:

楼主试试这个,代码较少。


比8楼长一点

剑栈风樯各苦辛,别时冰雪到时春
2015-11-12 20:36
快速回复:一个简单的程序,大家帮我看看
数据加载中...
 
   



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

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