Large Division LightOJ - 1214 高精度(数论专题)

给定两个整数a和b,你应该检查a是否可以被b整除。我们知道,当且仅当存在整数c使得a = b * c时,整数a才能被整数b整除。
Input
开始会输入一个数字 T (≤ 525), 代表了样例数.

每个样例会给两个整数a (-10200 ≤ a ≤ 10200) and b (|b| > 0, b fits into a 32 bit signed integer). 数字不会包含前导零.

Output
For each case, print the case number first. Then print ‘divisible’ if a is divisible by b. Otherwise print ‘not divisible’.

Sample Input
6

101 101

0 67

-101 101

7678123668327637674887634 101

11010000000000000000 256

-202202202202000202202202 -101

Sample Output
Case 1: divisible

Case 2: divisible

Case 3: divisible

Case 4: not divisible

Case 5: divisible

Case 6: divisible
高精度一般用字符串存储,当然会用Python和java做起来更简单。对于大数的取模运算,可以通过对每一位数字乘当前10的位数取模来操作

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<map>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<stdlib.h>

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>

#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
int main()
{
    int t;
    cin>>t;
    int cas=0;
    while(t--){
        string s;
        cin>>s;
        ll len=s.size();
        ll a,ans=0;
        cin>>a;
        if(a<0) a=-a;
        int i=0;
        if(s[0]!='-'){
            ans=s[0]-'0';
            i=1;
        }
        else{
            ans=s[1]-'0';
            i=2;
        }
        for(;i<len;++i)
            ans=(ans*10+s[i]-'0')%a;
        if(ans==0)
            cout<<"Case "<<++cas<<": "<<"divisible"<<endl;
        else
             cout<<"Case "<<++cas<<": "<<"not divisible"<<endl;

    }
    return 0;
}
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值