北航计算机机试16逆序数

题目描述
给定一个数n,将这个数的各位顺序颠倒,称为逆序数m。
例如1234的逆序数是4321。
输入
输入一个数n(0 < n<1000000000),已知输入开头不包含多余的0。
输出
如果m是n的k倍(k为整数),那么输出n*k=m。
如果m不是n的整数倍,那么输出n和n的逆序数。
样例输入
1234
1089
23200
样例输出
1234 4321
1089*9=9801
23200 00232

嗯,100000000并没有超过int
我的机子sizeof是4位的

这个还是有点小心机的,上代码:

#include<stdio.h>
//我竟然还想着用stack或者queue
int main()
{
    int num,renum,temp;

    while(scanf("%d",&num)!=EOF)
    {
    renum=0;
    temp=0;
    int s=num;
    int i=0;
    while(s!=0)
    {
        temp=s%10;
        s=s/10;
        i++;
        renum=renum*10+temp;
    }
    if(renum%num==0)
    {
        printf("%d*%d=%d\n",num,renum/num,renum);
    }
    else
    {
        printf("%d %0*d\n",num,i,renum);
    }
    }
    return 0;

}

从这几个方面说:
1.上机给出变量范围
题目难得给出了输入范围,如果不知道这个是什么类型,可以用sizeof来判断下你机子相应类型的占的字节数,比如我的机子
sizeof(int)=4;则我的int型最大数为4*8=32位的,而题目只有10位,满足int。
2.逆序数字
这是我在atoi函数学会的,从最高位开始算,辗转乘10加个位数
3.输出格式
题目中有说输入时前面不会有无聊的‘0’,但测试用例中,12300的逆序数是00321,则代表输出是有要求的
简单的说一下Printf的格式

原型:int printf(const char *format, …)
控制字符串(format):
普通字符:原封不动地复制到输出流中;
转换说明;

转换说明一般形式为:
%[flags] [ width] [.prec] [l] type
其中type为格式转换字符。

* 通过参数(只有域宽)来输入所需的数据域宽*
int width = 10;
printf(“%* d”, width, result); /* 以10个字符长的宽度输出result */
printf(“:%* .* d:\n”, 10, 6, 100); /* 即域宽为10,6位数,右对齐 */
结果为 : 000100: 前面有四个空格

printf的格式控制的完整格式:
% - 0 m.n l或h 格式字符
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=6位。*对于字符串.n表示用于指定从字符串左侧开始截取的子串字符个数。
⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务