VJ 1490 小菜的数码验证
描述
小菜最近在学数的数字数字特征,因此他打算编程来研究一下这个问题.
他的问题很简单,输入一个数N(1000<N<10^31),判断是否能分别被2、3、4、8整除,同时判断它是否有可能(注意只是有可能)
是完全平方数,依次输出1和0来表示能或不能.
格式
输入格式
一个自然数N(1000<N<10^31)
输出格式
5个数,1或者0分别表示能和不能
样例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; }