2019-01-28 字符数组TIPS

    这两天事情有点多,都跑出去没在家待着,题目自然是刷的少了,加上考研复习的资料到了,一时间有点分配不好时间,又加上想看生化2的录播,感觉有点小皮。不过说实话复习高数才让我明白过来大学前面两年在没有学习的基础上还已经把高中的数学知识给忘了很多,抓紧抓紧。所以说不能一天从早到晚都编题还是有点小痛苦的,以后就把刷题当做是一种放松吧,真的有意思多了。

    闲话少叙,虽然题目做的少了一点,但是今天还是略有收获。一般对于一些数值较大的数,涉及到它每一位的操作时,我总是习惯性地使用字符数组来解决,今天就有一个类似的题目,的确需要字符数组来做,但是在C语言中有一些比较小的细节需要注意,首先就是字符数组的输出,过去习惯性地使用一个for循环来输出,像数字数组一样,但是在C语言中有一个'\0'符号一直被我当做仅仅是用来初始化的工具,但是在字符数组最后加上这个符号就可以直接输出整个字符串,不需要再用循环来输出,的确好用。下面贴一个例题:

7-42 整除光棍 (20 point(s))

Author: 翁恺

Organization: 浙江大学

Time Limit: 400 ms

Memory Limit: 64 MB

Code Size Limit: 16 KB

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式:

输入在一行中给出一个不以5结尾的正奇数x(<1000)。

输出格式:

在一行中输出相应的最小的s和n,其间以1个空格分隔。

输入样例:

31

输出样例:

3584229390681 15

    这道题一开始我就想直接用字符数组来存1111的数,判断可以整除后直接输出,但是忽略了题目最后的提示用意是告诉你最后要输出的那个数很大,要用字符数组来存,所以最后PA了,参考了网上的代码后有了以下解决办法:

#include

#include

int main()

{

    int input = 0, num = 1, count = 0, p = 0;

    char res[1001];

    scanf("%d",&input);

    while(1)

    {

        count++;

        if(p != 0 || num / input != 0){

          res[p++] = '0' + num / input;

        }

        num = num % input; //判断是否已经整除,并将其赋值为当前最大位数的11...11

        if(num == 0)

        {

            res[p] = '\0';//如果字符数组中存放的是一个字符串,则最后一个字符应当'\0','\0'是结束符号,这样当输出这个字符串时,只须输入数组名就可以,输出函数会自动输出数组中的字符,直到遇到'\0'为止,否则你就要利用循环自己将字符一个一个的输出,而且还要判断该字符是不是所需要的字符(为什么不能改颜色)

            printf("%s %d\n", res, count);

            break;

        }

        num = num * 10 + 1;//左移增大

    }

    return 0;

}

    其实仔细回顾解题过程的话,会发现该题真正的难点其实是理解题目本身,以后参加检测或者考试的时候基本上都是这种题干很长、很绕的题目,所以检测实际上在读题的时候就开始了,如果像我一开始一样看到题就直接看输入输出,来根据输入输出来理解题意,很容易漏掉一些范围上的小陷阱,在仔细读题的时候,也要学会筛选信息,有很多信息实际上在编程中不需要考虑,比如本题中的不以5结尾的奇数这个条件是加在输入端的,不需要在最终的判定上加入,其实很多问题都是PA或WA之后可以发现的,但是如果每次还是指望编译器给你报错自己再去改,终究是没有什么长进的,要仔细。

你可能感兴趣的:(2019-01-28 字符数组TIPS)