VJ 1490 小菜的数码验证

描述

小菜最近在学数的数字数字特征,因此他打算编程来研究一下这个问题.
他的问题很简单,输入一个数N(1000<N<10^31),判断是否能分别被2、3、4、8整除,同时判断它是否有可能(注意只是有可能)
是完全平方数,依次输出1和0来表示能或不能.

格式

输入格式

一个自然数N(1000<N<10^31)

输出格式

5个数,1或者0分别表示能和不能

样例1

样例输入1[复制]

10000000000000000000000000000000000000000000000000000000000000000000000000000

样例输出1[复制]

1
0
1
1
1

限制

各个测试点1s

 

题解:

能被2整除的数末尾:0, 2, 4, 6, 8 —— 结尾数字都被2整除

能被3整除的数:各个位数上的数字和能被3整除

能被4整除的数:后两位能被4整除

能被8整除的数:后三位能被8整除

判断一个数是否为完全平方数:完全平方数的末尾一位只可能是 —— 0, 1, 4, 5, 6, 9.

CODE:

有点丑。。

#include <iostream>
#include <cstdio>
#include <cstring>
#define REP(i, s, n) for(int i = s; i <= n; i ++)
#define REP_(i, s, n) for(int i = n; i >= s; i --)
#define MAX_N 50

using namespace std;

char s[MAX_N];

int main(){
    scanf("%s", s + 1);
    int l = strlen(s + 1);
    if((int)(s[l] - '0') % 2 == 0) printf("1\n"); else printf("0\n");
    int sum = 0;
    REP(i, 1, l) sum += (int)s[i] - '0';
    if(sum % 3 == 0) printf("1\n"); else printf("0\n");
    if(((int)(s[l - 1] - '0') * 10 + (int)(s[l] - '0')) % 4 == 0) printf("1\n");
    else printf("0\n");
    if(((int)(s[l - 2] - '0') * 100 + (int)(s[l - 1] - '0') * 10 + (int)(s[l] - '0')) % 8 == 0) printf("1\n");
    else printf("0\n");
    if(s[l] == '0' || s[l] == '1' || s[l] == '4' || s[l] == '5' || s[l] == '6' || s[l] == '9') printf("1\n");
    else printf("0\n");
    return 0;
}    

 

 

posted @ 2015-05-24 15:36  ALXPCUN  阅读(166)  评论(0编辑  收藏  举报