HDU 5373 The shortest problem(判断一个数能否被11整除)
来源:互联网 发布:网络劫持修复工具 编辑:程序博客网 时间:2024/03/29 14:40
题目地址;点击打开链接
思路:参考队友的代码写的,资料地址:点击打开链接
怎样判断一个数能不能被11整除?
判断一个数能不能被11整除与判断一个数能不能被7整除一样,都没有直接判断的方法,需要借助间接的方法,这种间接的方法有两种,其一是“割减法”,其二是奇偶位差法。
(1)割减法:判断被11整除的割减法与判断被7整除的割减法不同。即:一个数割去末尾数字,再从留下来的数中减去这个末位数字,这样一次一次地减下去,如果最后结果是11的倍数(包括得0),那么这个数就能被11整除;如果最后结果不是11的倍数,那么这个数就不能被11整除。
例如:4708……割去末位8
因此,4708能被11整除。
在判断时,对于数目不大的数,用口算就可以看出结果。
通过口算可以得出:891能被11整除;1007不能被11整除。
(2)奇偶位差法:把一个数由右边向左边数,将奇位上的数字与偶位上的数字分别加起来,再求它们的差,如果这个差是11的倍数(包括0),那么原来这个数就一定能被11整除。
例如①:判断283679能不能被11整除。
23-12=11
因此,283679能被11整除。
②判断480637能不能被11整除。
21-7=14
因此,480637不能被11整除。
上述这种方法叫做奇偶位差法,算理可通过下列算式说明。
9÷9=1 9÷11(不能整除)
99÷9=11 99÷11=9
999÷9=111 99÷11(不能整除)
9999÷9=1111 9999÷11=909
99999÷9=11111 9999÷11(不能整除)
999999÷9=111111 999999÷11=90909
…… ……
由以上两算式中可以看到:全部由9组成的任何一个数,都能被9整除,但除以11则不一定,只有当9的个数成偶数时,才能被11整除,当9的个数是奇数时,则不能被11整除。
当一个数首尾数字相同,中间都是0,而且0的个数成偶数时,这个数也能被11整除。
如:11÷11=1
1001÷11=91
300003÷11=27273
……
通过用奇偶位差法的分解来判断8712能不能被11整除,从中也可以进一步理解这种判断方法的算理。
8712=8000+700+10+2 ①
偶 奇 偶 奇
偶位上的数可以写成:
8000=8×1000=8×(1001-1) ②
10=1×10=1×(11-1) ③
奇位上的数可以写成:
700=7×100=7×(99+1) ④
把②③④式代到①式中去。
第一个括号中所得的结果,肯定能被11整除,原数能不能被11整除,决定于第二个括号中所得的数,而第二个括号中的数,恰恰是奇位数字与偶位数字之差,由此而得出了用奇偶位差法来判断一个数能不能被11整除。
AC代码:#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;char a[1000000];int main(){ int n,t,sum1,sum,l,i; int sum_ji,sum_ou,casei = 1,begin1; while(scanf("%d%d",&n,&t)) { sum_ji = 0; sum_ou = 0; sum1 = 0; l = 0; if(n == -1 && t == -1) break; while(n) { a[l++] = n % 10 + '0'; sum1 += n % 10; n /= 10; } reverse(a,a+l); sum = sum1; while(t--) { begin1 = l; while(sum1) { a[l++] = sum1 % 10 + '0'; sum += sum1 % 10; sum1 /= 10; } reverse(a+begin1,a+l);//转换的是从begin1到l-1的位置,也就是说第一个参数是转换开始的位置,第二个参数是转换结束的下一个位置 sum1 = sum; } for(i=0; i<l; i++) { //printf(" %c",a[i]); if(i % 2 == 0) sum_ji += a[i] - '0'; else sum_ou += a[i] - '0'; } //printf("\n"); printf("Case #%d:",casei++); l = abs(sum_ji - sum_ou); if(l % 11 == 0) printf(" Yes\n");//注意输出,前面有一个空格,大小写都有 else printf(" No\n"); } return 0;}
- HDU 5373 The shortest problem(判断一个数能否被11整除)
- 怎样判断一个数能否被7整除
- 判断一个数能否被另一个数整除
- 判断一个数能否被7或9整除
- 判断一个数能否被2、3、5整除
- 如何判断一个数字能否同时被两个数整除;
- 判断一个数能否被3,5,7整除
- 输入一个数判断能否被五整除
- 快速判断一个数能否被2、3、4、5、7、9、11整除
- 快速判断一个数能否被 2 ,3 ,4 ,5, 7,9,11 整除
- 习题 2.4(5) 判断一个数n能否同时被3和5整除。
- 判断数abcdef能否被11、12整除
- HDU 5373 The shortest problem (水题)
- hdu 5373 The shortest problem(模拟)
- hdu 5373 The shortest problem(水)
- hdu 5373 The shortest problem (模拟)
- HDU 5373 The shortest problem
- hdu 5373 the shortest problem
- 两种 ext.net treepanel 的子父节点联动的写法
- 重庆老烂腿老烂腿
- 悄悄告诉Facebook产品的开发流程
- 重庆老烂腿手术危险吗
- swift -变量的定义与使用
- HDU 5373 The shortest problem(判断一个数能否被11整除)
- Codeforces Round #200 (Div. 2)344C Rational Resistance(模拟)
- Android studio 报错 gradel project sync failed Error:Cause: peer not authenticated
- 重庆轻度老烂腿怎么治
- HDU 5067 Harry And Dig Machine (DFS)
- 重庆小腿老烂腿中医
- LeetCode总结
- C黑白棋
- 重庆脚上老烂腿怎么治疗