大数处理——判断奇偶

来源:互联网 发布:b2b平台数据 编辑:程序博客网 时间:2024/06/05 17:49

题目描述

Bessie那惨无人道的二年级老师搞了一个有 N (1 <= N <= 100) 个正整数 I (1 <= I <= 10^60) 的表叫Bessie去判断“奇偶性”(这个词语意思向二年级的学生解释,就是“这个数是单数,还是双数啊?”)。Bessie被那个表的长度深深地震精到了,竟然跟栋栋的泛做表格一样多道题!!!毕竟她才刚刚学会数数啊。
写一个程序读入N个整数,如果是双数,那么在独立的一行内输出"even",如果是单数则类似地输出"odd"

输入格式:

第一行:  一个单独的整数:  N *  第2到第N+1行:  第j+1行有第j个需要判断奇偶性的整数。

输出格式:

第1..N行:  第j行根据第j个整数的奇偶性输出一个单词" even" 或者" odd"

样例输入:

2

1024

5931

样例输出:

even

odd

分析

这道题看似简单,判断奇偶性简单直接的办法就是用2来进行判断,如果除以2余数为0,那么就是偶数,否则为奇数。

本题的难点在于输入的正整数I的大小范围在1 <= I <= 10^60,10的60次方,从存储大小来看,byte-->KB-->MB-->GB-->TB,到达TB的时候,10的数量级也不过为12,所以输入的正整数不能够用常规的int整型或者数组进行存储(毕竟太大了,内存肯定不够)。

所以,再次从判断奇偶性的角度出发,我们其实只需要知道个位的数字,然后拿个位的数字进行判断奇偶就可以得到这个大数的奇偶性。因此,我们需要做的就是,忽略掉每一个输入的无用位数,直接获取有价值的个位,然后进行判断、输出。

有一个char转int的小技巧:

int = char - '0'

在下面的代码中,可以看到具体的使用方法。

代码

#include <stdio.h>int main(){    int n;    scanf("%d",&n);    char last = '\0';    int i;    for(i=0;i<n;i++)    {        int num;        getchar();        scanf("%c",&last);        while(last != '\n')        {            num = last - '0';            scanf("%c",&last);        }        if(num%2==0)            printf("even\n");        else            printf("odd\n");    }    return 0;}


0 0
原创粉丝点击