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<stdio.h>

#include<math.h>

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之后可以发现的,但是如果每次还是指望编译器给你报错自己再去改,终究是没有什么长进的,要仔细。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,101评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,246评论 0 19
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,276评论 0 9
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,068评论 0 41
  • 小牛姑阅读 165评论 0 0