第六届省赛J题 single round math

本文介绍了两种高效处理大数问题的方法:一是判断一个大数是否为11的倍数的技巧,二是通过递归思想实现的大数取模算法,并附带示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题的逻辑在于先判断相等,然后就是判断这个数是否可以被11整除.
由于这个数很大,很容易就想到了同余定理.就是怎么样用的问题了.
第一 首先想到的是我之前看过一个结论就是关于可以被11 整除的数,每位数之间是有关系的
按照这个经验了一下就发现了,奇数位上之和和偶数位上之和之差可以被11整除
第二 大数取模的思想.这个实在网上看的.来说一下.
类似于秦九召算法,的原理就是递归的思想利用同余定理.
(1)大数存储:由于x的位数最大为400位,我们不能用现有的int,long,long long,double等数据类型进行存储。一般存储大数的方法是用一个字符串来表示。
(2)取模运算:模拟手算竖式的方法。用x从高到低的每一位加上前一位余数*10来对bi进行%,最后得到的结果就是x%bi的结果。
利用到公式:(a+b) mod (n) = (a mod n) + (b mod n) mod (n);
1 %m = 1
12 % m = ( 1 * 10 + 2 ) % m = ( 1 % m * 10 + 2 ) % m
123 % m = ( 12 * 10 + 3) % m = ( 12 % m * 10 + 3) % m

12345678901234567890 % m =(( 1 % m * 10 + 2 ) % m * 10 + 3 ) % m…

int divMod(char* ch,int num)
{
    int s = 0;
    for(int i=0;ch[i]!='\0';i++)
        s = (s*10+ch[i]-'0')%num;

    return s;
}

这部分转载自
http://blog.youkuaiyun.com/wu_cai_/article/details/44536271

第三个方法就是java .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值