[算法]CSDN编程挑战赛之整数取反

49 篇文章 0 订阅
14 篇文章 1 订阅

今天看了一下庞果网发布的编程挑战赛,我就做了一题目,结果却让我失望,没提交的上去,也不知道是网速原因还是什么,一直处于提交状态,然后我就没理它,一直耗到时间结束,但最后我发现,竟然记我一个挑战失败,好失望!关键是还没有重新挑战的机会。算了,关键是自己得到了锻炼就好!下面就共享我的算法,可能不是最优的算法,如果读者有什么好的建议或者是好的算法欢迎提出,一起交流!

题目:


以下是我做的几个版本的代码:

C语言版本代码:

#include<stdio.h>

int reverse(int x)
{
    int yushu;
    int res[20];
    int jieguo=0;
    int i=0;
    if (x>0)
    {
        do 
        {
            yushu=x%10;
            res[i]=yushu;
            x=x/10;
            i++;
        } while (x);
        int ii=i-1;

        for (int j=0;j<i;j++,--ii)
        {
            int r=1;
            //printf("%d",res[j]);
            for (int n=0;n<ii;n++)
            {
                r*=10;
            }
            jieguo+=res[j]*r;
        }
        return jieguo;
    }
    //如果是负数
    else
    {
        int jj = 0-x;
        int jieguo1=reverse(jj);
        jieguo1=0-jieguo1;
        return jieguo1;
    }
    
}

int main()
{
    int num;
    printf("请输入数字:");
    scanf("%d",&num);
    printf("你输入的数字是:%d\n",num);
    int n =reverse(num);
    printf("转置后的数字是:%d",n);
    return 0;
}


C语言另外一版本:

#include<stdio.h>

int main()
{
    printf("题目1:整数取反\n");
    char a[20],*p,*q;
    int i,j;
    p=a;
    q=a;
    for(i=0;i<20;i++)
    {
        scanf("%c",&a[i]);
        if(a[i]!='\n')
        {
            p++;
        }
        else 
            break;
    }
    printf("取反后的数是:");
    //如果是正数
    if (*q!='-')
    {
        for(i;i>=0;i--)
        {
            printf("%c",*(--p));
        }
    }
    //如果是负数
    else
    {
        printf("%c",*q);
        for (i;i>1;i--)
        {
            printf("%c",*(--p));
        }
    }
    return 0;
}

运行结果:




C#版本代码:

#include<stdio.h>

int main()
{
    printf("题目1:整数取反\n");
    char a[20],*p,*q;
    int i,j;
    p=a;
    q=a;
    for(i=0;i<20;i++)
    {
        scanf("%c",&a[i]);
        if(a[i]!='\n')
        {
            p++;
        }
        else 
            break;
    }
    printf("取反后的数是:");
    //如果是正数
    if (*q!='-')
    {
        for(i;i>=0;i--)
        {
            printf("%c",*(--p));
        }
    }
    //如果是负数
    else
    {
        printf("%c",*q);
        for (i;i>1;i--)
        {
            printf("%c",*(--p));
        }
    }
    return 0;
}



运行结果:



最后提供一个简易版的算法,上面的代码都太差劲了

int fun(int a) 
{ 
int temp = 0; 
while(a) 
{ 
temp = temp*10 + a%10; 
a = a / 10; 
} 
return temp; 
}

很简单有木有,呵呵,看来算法还是很能考验一个程序员编程和思想的能力的!



==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:858550         cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================

转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/17471827

欢迎关注我的微博: http://weibo.com/u/2590571922
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值