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

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

题目:

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

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

时间: 2024-11-08 18:30:01

[算法]CSDN编程挑战赛之整数取反的相关文章

[算法]CSDN编程挑战赛之寻找直方图中面积最大的矩形

继续看挑战赛的算法,虽然不指望能得到什么奖项,但能够将自己的思想用程序表达出来就是一种乐趣! 请看题: 我的解题思路: 就是判断[i,i+1,i+2...j]之间的最小高度H,然后通过s=(j-i+1)*H来计算面积,然后筛选出最大的面积. C++代码: //寻找直方图中面积最大的矩形 #include <cstdio> #include <cstring> #include <string> #include <vector> #include <s

面试题:整数取反

今天做了下英雄会在在线挑战,题目是 完成函数reverse,要求实现把给定的一个整数取其相反数的功能,举两个例子如下: x = 123, return 321 x = -123, return -321 地址是http://hero.pongo.cn/Question/Details?ID=50&ExamID=48 我提交的代码是 // reverseIntergerTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #includ

java代码-关于CSDN英雄会挑战赛 java编程中的一些问题

问题描述 关于CSDN英雄会挑战赛 java编程中的一些问题 各位大神,我在挑战英雄会的题目的时候,在线下运行的没有问题,可是一提交就会提示,"挑战失败:你的程序正常编译,不过运行时发生错误,通常是代码有问题,如除数为零数组上下界溢出等" 我觉得可能是java输入数据时的问题,因为题目要求:输入多行数据,输出多行我是这样写的: Scanner scanner = new Scanner(System.in); ArrayList list = new ArrayList(); do {

大整数取模(秦九韶算法)

//大整数取模,利用秦九韶算法 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 10000 int main() { char str[N]; int len;int i;int mod; long long ans=0; scanf("%s",str); getchar(); scanf("%d",&mod); len=strlen(st

《算法设计编程实验:大学程序设计课程与竞赛训练教材》——3.2 求解不定方程和同余方程的实验范例

3.2 求解不定方程和同余方程的实验范例 公约数和同余问题是初等数论的两个核心内容,是求解许多数论问题的基础.本节将围绕这两个问题展开实验: 1)计算最大公约数和最大公约数的线性组合,在此基础上介绍求解不定方程的方法,并为求解同余方程作铺垫. 2)介绍求解同余方程和同余方程组的基本方法.3.2.1 计算最大公约数和不定方程 整数a和b的最大公约数可通过欧几里得公式计算:gcd(a,b)=ba=0 gcd(b mod a,a)否则 证明:关键是证明gcd(a,b)与gcd(b,a mod b)可互

javascript中的取反再取反~~没有意义_javascript技巧

操作符~, 是按位取反的意思,表面上~~(取反再取反)没有意义,实际上在JS中可以将浮点数变成整数. 复制代码 代码如下: <html> <script> var myArray = new Array(); myArray.push("a"); myArray.push("b"); myArray.push("c"); myArray.push("d"); //现在要随机从数组中取出一个元素 var

C语言位运算符:与、或、异或、取反、左移与右移详细介绍_C 语言

位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将

第四届大学生RDMA编程挑战赛落幕 国防科大与华中科大摘得桂冠

在2016年HPC Advisory Council (国际高性能计算咨询委员会)中国研讨会上, HPC Advisory Council正式揭晓第四届大学生RDMA编程挑战赛 (The 4th Student RDMA Programming Competition) 的比赛结果,并为获奖队伍颁奖.来自国防科技大学和华中科技大学的两支队伍凭借出色的表现摘取一等奖,国防科大更是连续两年蝉联第一.中国科技大学和西安电子科技大学1队夺得了二等奖,三等奖则花落西安电子科技大学 2队.西北工业大学.中国

Google编程挑战赛清华学生包揽冠亚军

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 Google Code Jam编程挑战赛总决赛上周末在美国加州Mountain View Google总部举行.最终,来自中国的两位选手包揽了冠亚军. 此次是Google Code Jam的第五届,由包括前冠军选手在内组成的20%-time团队开发了一套新的竞赛平台,提供了超过1.1万条的编程算法难题,参赛者可用自己喜欢的编程语言解答.经过7