首页 > 其他分享 >HDU 5373 The shortest problem(判断一个数能否被11整除)

HDU 5373 The shortest problem(判断一个数能否被11整除)

时间:2022-10-10 21:05:41浏览次数:77  
标签:11 10 HDU 判断 sum 5373 sum1 整除


题目地址;​​点击打开链接​

思路:参考队友的代码写的,资料地址:​​点击打开链接​

 

怎样判断一个数能不能被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;
}



标签:11,10,HDU,判断,sum,5373,sum1,整除
From: https://blog.51cto.com/u_15740602/5745263

相关文章

  • comp3411-prolog辅导(一)基础知识
    本文介绍的prolog内容如下:如果没有Linux环境的话,建议在浏览器的在线网页中学习prolog。文章目录​​1.install​​​​2.introduction​​​​3.variables​​​​4.if......
  • comp3411辅导assignment2
    文章目录​​1内容分析​​​​1.1​​​​1.2模拟机器人​​​​1.2.1代码使用​​​​1.1.4test1成功,深度优先​​​​1.1.3test2失败,也就是说,深度优先失败的原因​......
  • 微软公布 Windows 11 正式版的推送日期,但可能会让你失望
    自Windows11发布之后,微软已经推送了数个预览版,但正式版何时推送一直是众多Windows爱好者关心的问题,目前,这个问题已经有了答案。上周二,微软正式在官方的新闻中心公布了......
  • 【镜像下载】大更新:Windows 11 (22449.1000 / 22000.176) 八合一纯净版
    今天凌晨,微软照例向Beta和Dev通道的 Windows 预览体验用户推送了本周Windows11预览版的更新,和上几周不同的是,本次向 Beta 和 Dev通道推送的是不同的版本:Beta......
  • 如果你安装 Win11 也遇到了问题,可以试试这些解决方案
    随着第一个​​Win11第一个预览版镜像的泄露​​,众多电脑爱好者一下子又找回了折腾的激情,不过毕竟是预览版,难免遇到各种问题,这里就针对这两天收到的各种问题做一个统一的......
  • Windows 11 汉化包
    Windows11预览版的镜像已在昨天流出,许多喜欢尝鲜的小伙伴们应该都迫不及待地下载安装了。不过目前还只有英文版的镜像,即使在系统设置里添加了中文,依然后大部分界面包括资......
  • Leetcode 11 -- 贪心
    题目描述最小字典许思路思路来源由于t中的字符后进先出,可以使用一个暂存栈来保存s删除的第一个字符入栈很简单,初始状态下,栈为空,我们可以直接入栈,因此,每次遍历我们......
  • 概要11
    今日内容回顾目录今日内容回顾函数参数之位置参数默认参数可变长形参可变长实参命名关键字参数(了解)名称空间名称空间存活周期及作用范围名字查找顺序查找顺序案例函......
  • 【镜像下载】Windows 11 Build 22000.132 五合一纯净版
    今天凌晨,微软向Dev和Beta通道的用户推送了Windows11的最新预览版,版本号为22000.132,累积更新补丁为KB5005190。新版本没什么特别大的功能升级,主要就是带来了新的Tea......
  • 11
    今日内容总结函数参数之位置参数位置形参:函数定会阶段括号内从左至右填写的变量名defaaa(1,2,3):print(1,2,3)位置实参:函数调用阶段括号内从左往右填写......