(基于同余定理)大数取模
创始人
2025-05-31 23:11:26
0

22周赛 - Virtual Judge (vjudge.net)

https://vjudge.net/problem/LightOJ-1214/origin


Input starts with an integer T (≤ 525), denoting the number of test cases.

Each case starts with a line containing two integers a (-10200 ≤ a ≤ 10200) and b (|b| > 0, b fits into a 32 bit signed integer). Numbers will not contain any leading zeroes.

a能否被b整除


卡壳原因是mod没开long long,没有重视debug的重要步骤,爆范围的bug出现率目前是排行第一的,优先检查

#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
int main(){int t;cin >> t;for(int tt = 1;tt <= t;tt++){string s;ll m;cin >> s >> m;if(s[0] == '-') s.erase(0,1);ll mod = 0;for(int i = 0;i < s.size();i++){mod = ((mod * 10 % m) + (s[i] - '0') % m ) % m;}if(!mod)printf("Case %d: divisible\n",tt);else printf("Case %d: not divisible\n",tt);}return 0;
}

我本来是把思路记在自己的word文档里的,但为了帮助想搞懂题意的朋友们,还是把思路粘在文章最末尾

我的思路是没什么思路,只有一个两百次方的数肯定要用字符串来存
没见过此类大数取模的题,吃亏了
题解思路,字符串存数字,然后由同余定理,1234 % m等价于1000 % m + 200 % m + 3 % m + 4 % m
答案巧妙在于从左边开始枚举数位,组成一个数,来不断模m,通过数位操作使忽略后导零也合法。

字符串起始位置根据正负的不同,起点也不同,for循环的i在外面定义,根据字符串正负来取不同的值作为for循环初始可以较好的解决这个问题

此外s.erase()也是不错的选择

相关内容

热门资讯

嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...
家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...
中国军视网:日本妄言击沉福建舰... 本文转自【中国军视网】; 日本首相高市早苗发表涉台错误言论,公然挑战一个中国原则,甚至还有日本无知政...
重磅!东莞长安50万㎡产城发布... 在当下竞争激烈的市场环境中,中小企业如何突破成本压力,找到一片既能扎根成长又能眺望未来的理想栖息地?...
毕马威:政策、资本等多维着力 ... 由毕马威联合长三角G60科创走廊创新研究中心主办的“长三角高端装备新质领袖榜单发布仪式”于11月21...