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

2015-01-25 11:40:35 · 作者: · 浏览: 6

是否被整除

时间限制:1000 ms | 内存限制:65535 KB 难度:2
描述
一个位数不大于100万位的正整数,如果它既能被11整除又能被2的n次方整除就输出YES否则输出NO
输入
输入有多组数据每组数据有两行
第一行一个n代表2的n次方(0 第二行一个整数
输出
输出只有一行每行一个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
      
       
#include
       
         #include
        
          #include
         
           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
          
           

<script type="text/java script">
<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"24"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];