nyoj1086是否被整除(数学小技巧)

是否被整除

时间限制:1000 ms  |  内存限制:65535 KB

难度:2

描述
一个位数不大于100万位的正整数,如果它既能被11整除又能被2的n次方整除就输出YES否则输出NO

输入
输入有多组数据每组数据有两行

第一行一个n代表2的n次方(0<n<18)

第二行一个整数

输出
输出只有一行每行一个YES或NO
样例输入
1
110
2
1100
3
110
样例输出
YES
YES
NO
来源
原创
上传者

TC_蒋鑫博

思路:能被2的N次方的数整除的数的特征

如果一个数末N位能被2的N次方的数整除,那么这个数就能被2的N次方的这个数整除。

如能被8(2的3次方)整除的数的特征:这个数字的末三位能被8整除。

能被11整除的数的特征

把一个数由右边向左边数,将奇位上的数字与偶位上的数字分别加起来,再求它们的差,如果这个差是11的倍数(包括0),那么,原来这个数就一定能被11除.

例如:判断491678能不能被11整除. —→奇位数字的和9+6+8=23

—→偶位数位的和4+1+7=12

23-12=11 因此,491678能被11整除. 这种方法叫"奇偶位差法".

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int a[22]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576};
int main()
{
    int n;
    char s[1000005];
    char ss[1000005];
    while(cin>>n>>s)
    {
        int l=strlen(s);
        int k=0;
        for(int i=l-n;i<l;i++)
            {
                ss[k++]=s[i];
            }

        long long num=0;
        for(int i=0;i<k;i++)
        {
            num=num*10+(ss[i]-'0');
        }
        int sumj=0;
        int sumo=0;
        for(int i=0;i<l;i++)
        {
            if(i%2==0)
                sumo+=s[i]-'0';
            else
                sumj+=s[i]-'0';
        }
        int sum=sumj-sumo;
        if(sum%11==0&&num%a[n]==0)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
}
/*
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576*/
时间: 2024-11-05 01:16:03

nyoj1086是否被整除(数学小技巧)的相关文章

数学小技巧(模拟)求1/n

求1/n(是循环小数只输出第一个循环节) 思路:模拟求余 http://acm.nyist.net/JudgeOnline/problem.php?pid=330 #include<iostream> #include<string.h> #include<stdio.h> using namespace std; int vis[100005]; int main() { int d,n; cin>>d; while(d--) { cin>>n

HDU -2674 N!Again(小技巧)

这道题有个小技巧,就是既然是n!,那么对2009求余,只要大于2009!,那么一定是0,在仔细想想会发现,根本到不了2009,只要到2009的最大质因数就行了,为什么呢?因为最大质因数是最大的一个不能被2009整除的,2009的最大质因数是41,也就是只要大于41的阶乘的都可以整除2009,因为41的阶乘可以整除,42! = 42 * 41!,所以大于41的全部为0,那么这个题就简单了 代码如下: 1 #include<iostream> 2 #include <cstdio> 3

OD鲜为人知的小技巧--搜索通配符(关键字)

我看过一些OD教程,关于通配符这一点很少有人讲解(大概是我看的教程少吧)  近日通过看<黑客反汇编揭秘(第二版)>第165页了解到,原来OD还有这样方便的功能,那就是搜索通配符: OllyDbg所支持的用于指定断点的关键字(以正则表达式形式给出) 关键字 描述 R8 任意8位寄存器(AL,BL,CL,DL,AH,BH,CH,DH) R16 任意16位寄存器(AX,BX,CX,DX,SP,BP,SI,DI) R32 任意32位寄存器(EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI

10个提升MySQL百家乐性能baijiale的小技巧

从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫. 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困境之中,你的工作也承受极大的风险. 不过事实是,普通的错误都在MySQL性能错误的射程之内.所以为了使你的MySQL服务器能够高速运转,提供稳定且持续的服务,消除这些错误是非常有必要的,但是这可能常常会被你的繁忙工作或配置陷阱微妙地遮蔽了. 幸运的是,许多MySQL性能问题其实都有相似的解决办法,发现并

javascript小技巧-js小技巧收集(转)

本文转载自:http://blog.csdn.net/ocean20/article/details/2498699 每一项都是js中的小技巧,但十分的实用! 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document) 5.得

运算符中的一些小技巧

- 记下一些关于运算符的小技巧或容易出错的地方 %运算符 取余运算符运算结果的正负号由第一个运算子的正负号决定,比如: 1 -1 % 2 // -1 2 1 % -2 // 1 所以有时候对负数取余会出现错误,使用绝对值函数可以避免错误: // 会出错 function isOdd(n) { return n % 2 === 1; } isOdd(-5) // false isOdd(-4) // false // 正确了 function isOdd(n) { return Math.abs(

FineUI小技巧(7)多表头表格导出

前言 之前我们曾写过一篇文章 FineUI小技巧(3)表格导出与文件下载,对于在 FineUI 中导出表格数据进行了详细描述.今天我们要更进一步,介绍下如何导出多表头表格. 多表头表格的标签定义 在 ASPX 中,我们通过 GroupField 列来定义多表头,如下所示: <f:Grid ID="Grid1" Title="表格" EnableCollapse="true" ShowBorder="true" ShowH

MathType使用中的四个小技巧

MathType是一种比较常见的数学公式编辑器,常常与office搭配着使用,我们在使用的时候有一些要注意的小技巧,下面我们就来给大家介绍介绍MathType使用中的四个小技巧? 技巧一:调整工具栏显示比例 使用场景:头昏眼花总觉得看不清的MathType工具栏符号模板的时候就可以将显示比例调整得大一点,方便一眼就看到各种符号和模板. 操作过程: 1.打开MathType编辑窗口,选择“预置”——“工作区预置”. 2.在弹出的对话框中,在“工具栏大小”一项根据需要选择“中”或者“大”,点击“确定

性能优化小技巧

https://developer.android.com/training/articles/perf-tips.html 这篇文章主要讲述了一些小优化,但是如果把这些小优化都结合起来的话则会提高一个app的整体性能.不过这也不代表对于性能它们会有质的改变.首当其冲是选择正确的算法和数据结构,不过它不在本篇文章的讨论范围内.你应该将本篇文章讨论的小技巧融入到编码习惯中以提示通用编码效率. 编写有效率的代码,有两个基本的原则: 不要做太多不需要你做的事 不要使用你可以不用的内存 当对一个app进