| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1725 人关注过本帖
标题:可以写一下这个程序吗》或者告诉我思路也行,谢谢。
只看楼主 加入收藏
北国123456
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2016-10-6
结帖率:70%
收藏
已结贴  问题点数:20 回复次数:9 
可以写一下这个程序吗》或者告诉我思路也行,谢谢。
输入一个整数,你的任务是计算并输出这个整数的反数。反数的定义如下:
1.结尾非0的正整数的反数就是一般的取反概念:12的反数为21
2.负数的反数仍是负数:-12的反数为-21
3.结尾为0的正整数的反数为:1200的反数为2100
      
          我不清楚输入的数究竟有几位,然后怎么变化它们呢,以前知道输入的是几位数,可以用%或/1000什么的来变换,现在怎办呢?
搜索更多相关主题的帖子: 正整数 
2016-10-26 22:27
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
不知道有几位数就用字符串来存放啊。
2016-10-26 22:44
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:5 
//-12300这种情况没说,不知道是不是对的
#include<stdio.h>
int main()
{
    int a,r,h=1,s=0,c=1;
    scanf("%d",&a);
    while(a!=0){
        r=a%10;
        if(r==0&&c==1)
            h*=10;
        else{
            s=s*10+r;
            c=0;
        }
        a=a/10;
    }
    s*=h;
    printf("%d\n",s);
    return 0;
}

[此贴子已经被作者于2016-10-26 23:56编辑过]

2016-10-26 23:55
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
程序代码:
#include<stdio.h>
int main()
{
    char c=' ';//对字符c初始化
    int a[50],i=0,j,t,t1,t2,u;//声明下列要用到的变量
    t=t1=t2=u=0;//t t1 t2 u都为状态变量,统一赋初值为0
    while (c!='\n')
    {
        if (!i)c=getchar();//当第一个字符第时的位置
        a[i]=c-48;//字符的ASCII码与数字的值相差48
        if (!a[i])//当输入数字0时
        {
            !t2;//t2为记录字符中间的有没有0位
            t++;
        }
        //记录末尾为0位的个数
        else t=0;
        if (i)c=getchar();//第二个字符之后输入的位置,目的是避免换行符对执行运算的干扰
        i++;
    }
    if (t)t2=0;//如果末尾数字为0则下面将要执行t2条件就不成立
    t1=t;//把末尾0位的个数赋值给t1,t1的作用是记录末尾数字0的个数
    if (!a[0])//数字首位不能为0
    {
        printf("数字首位不能为0\n");
        return 0;
    }
        if (a[0]<0)printf("-");//当输入负数时要打印负号
        for (j=i-2;j>0;j--)
        {
            if (t>1)//当执行循环对应的运算字符末尾数字为0时
            {
                t--;
                continue;//跳过循环,等于暂时对末尾数字0的情况不作处理
            }
            if (a[j+1]||u)//当末尾数字不为0时且状态变量u不为0时
                printf("%d",a[j+1]);
            if (t==1&&t2)printf("0");/*状态变量t2作用就在这里补0
            (虽然本人也不完全明白其中逻辑关系,但经测试是要加的)*/
            else 
            {
                if (!a[i+1])//如果末尾数字为0
                    printf("0");//输出末尾的数字0(虽然本人也不完全明白其中逻辑关系,但经测试是要加的)
                u=1;//u=1时意思是最多只有一次不执行上方的条件
            }
        }
        if (a[0]>0)printf("%d",a[0]);
        for (t=t1;t>0;t--)
            printf("0");//输出末尾数字为0的个数
        printf("\n");
}//最后,这个程序还有一个小问题,也就是输入0时会……但这个漏洞很容易修改,就请多多原谅吧
//抱歉,本人也有考虑把运算部分在非主函数体里执行,但看上去整个程序的整体性较强,改写函数体比较麻烦,不便之处请多多原谅


[此贴子已经被作者于2016-10-27 00:19编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-27 00:17
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:5 
//3楼代码应该可行,不过逻辑上可以简化的,如下:
#include<stdio.h>
void main()
{
    int n,j,k;
    scanf("%d",&n);
    for(j=0,k=1;n;n/=10)
    {
        j=j*10+n%10;
        if(!j)k*=10;
    }
    j*=k;
    printf("%d\n",j);
}
2016-10-27 08:47
北国123456
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2016-10-6
收藏
得分:0 
回复 4楼 九转星河
这个     那么难啊
2016-10-28 17:37
北国123456
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2016-10-6
收藏
得分:0 
回复 5楼 xzlxzlxzl
谢谢
2016-10-28 17:38
北国123456
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2016-10-6
收藏
得分:0 
回复 5楼 xzlxzlxzl
看不懂怎么办
2016-10-28 22:34
北国123456
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2016-10-6
收藏
得分:0 
回复 3楼 word123
为什么是这样做呢?
2016-10-28 22:41
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
我就是把输入的数从个位开始一个个弄出来,若是0就乘一个10到另一个数上,将连续0前面的数反转,最后把后面连续的0全部添加到后面。
2016-10-28 22:54
快速回复:可以写一下这个程序吗》或者告诉我思路也行,谢谢。
数据加载中...
 
   



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

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