| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12521 人关注过本帖, 1 人收藏
标题:如何输出一个三位数的逆序数(这个数可能是负数)?
只看楼主 加入收藏
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:2 
回复 楼主 冰莫辰
我来试给解解:
从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号)。例如,输入-123,则忽略负号,由123分离出其百位1、十位2、个位3,然后计算3*100+2*10+1 = 321,并输出321。
1.读入一个三位数。(是否需要判断,必须三位数?)
2.判断是否负数,是则去负取正。
3.反位输出。
程序代码:
#include <stdio.h>
int main(int argc, char **argv)
{
    int x = 0;
    do {
        while (getchar() != '\n'){};//这里先清空输入缓存,解决如果字符输入会造成的程序错误
        scanf("%d",&x);//确定清空后,接受输入
        if (x>-1000 && x<-99){    //如果是3位的负数,则取正
        x*=-1;
        }
    }while (x<100 || x>999);//结束条件为小于最少的3位数100或大于最大的3位数999

    printf("%3d\n",x/100+x%100/10*10+x%10*100);//这里如果100,则只显示1,因为数001的整数输出为1

    printf("%d%d%d",x%10,x%100/10,x/100);//这样则可以输出100的反序为001
    return 0;
}


当然,可能还有更好的方法,希望更多大神来指教。
2015-04-09 00:34
liting561199
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2015-3-24
收藏
得分:2 
我艹嘞,楼上的都写这么复杂干嘛
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int  x ,i ,t , h ,y ,k ;   /h,t,i分别代表 百位,十位,个位;
    scanf("%d", &x);
    k = abs(x);
    h = k / 100;
    t = (k - h * 100) / 10;
    i = k - h * 100 - t * 10;
   
    y = h*1 + t*10 + i*100;
   
    printf("输出个十百:%d,%d,%d\n ", i ,t ,h );
    printf("输出计算所得:%d", y);
    return 0;
}
2015-04-09 09:25
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
各人风格不同,楼上的可以试试输入的内容不为数字,而是字符串就明白了。
最后别用艹等字眼好吗?我是学习来的,抛出代码目的是让大家看看我的代码是否有问题,是否可修补完善,并无他意或逞强。
希望大家进步互勉
对了,我是因为不想引用太多的函数库函数,所以才没预处理数学函数库,因为我觉得可以不用就不用,有助资源的利用。

[ 本帖最后由 kin3z 于 2015-4-9 10:13 编辑 ]
2015-04-09 10:11
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:2 
我还是比较喜欢用库函数来解决问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void main (void)
{
    int value;
    char buf[10];

    scanf("%d", &value);
    printf("%s\n", strrev(itoa(abs(value), buf, 10)));
}

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2015-04-09 17:46
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
善于利用函数是好事,我接触的函数还不够,哎

你醒了?快起来敲代码!!
2015-04-09 18:08
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:2 
程序代码:
#include <stdio.h>
#include <string.h>
#define MAXN 1024

char s[MAXN];
int top = 0;
void print(int *top);
int main() {
    
    char ch;
    while ( (ch = getchar()) != EOF) {
        
        if (ch == '\n') { print(&top); continue;}
        if (ch == '-' || ch == '+') continue;
        s[top++] = ch;
        
    }
    
    return 0;
}

void print(int *top) {
    *top = *top - 1;
    for (;*top >= 0;(*top)--)
        printf("%c", s[*top]);
    *top = 0;
    puts("");
}

这显然符合栈、过滤下数据而已。用C++比较简练,指针看着就不舒服。支持1024位数字

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-04-09 19:12
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
突然想到,忘了过滤后面都是零的了==、逃~。
加上for(;s[*top] == '0';(*top)--);就可以鸟~。
程序代码:
void print(int *top) {
    *top = *top - 1;
    
    for (;s[*top] == '0';(*top)--);
    
    for (;*top >= 0;(*top)--)
        printf("%c", s[*top]);
    *top = 0;
    puts("");
}

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-04-09 19:20
xt1827921096
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-3-24
收藏
得分:0 
回复 楼主 冰莫辰
#include <stdio.h>
#include <math.h>
main()
{
int x,a,b,c,y;
printf("Input x:\n");
scanf("%d", &x);
x=fabs(x);
c=x/100;
b=(x-c*100)/10;
a=x%10;
y=a*100+b*10+c*1;

printf("y=%d\n",y);
}

2018-03-24 17:35
pinenut
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-3-20
收藏
得分:0 
回复 楼主 冰莫辰
楼主,我不知道楼上那些人的思路,但是你的代码只需要把c = x/10;改成 c = x%10;就好了。
2018-12-07 10:30
快速回复:如何输出一个三位数的逆序数(这个数可能是负数)?
数据加载中...
 
   



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

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