lightoj 1214

lightoj 1214 Large Division  (大数除法)

链接:http://www.lightoj.com/volume_showproblem.php?problem=1214

题意:给定 a, b 两个数,判断 a 是否整除 b 。(a 为 大数)

思路: 用字符串存 a ,转化为 整型数组,用除法原理进行处理,没什么难度。其中关键是负号的处理。

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <vector>
 7 using namespace std;
 8 
 9 typedef long long LL;
10 LL b, x, y;
11 char ar[202];  // a
12 int nu[202];    //把 a 字符转化为数字
13 
14 bool option()
15 {
16     int i = 0, j;
17     int len = strlen(ar);       //a 的长度
18     if(ar[0] == '-')  len--, i = 1; //去掉 a 的‘-’号
19     for(j = 0; ar[i]; ++j, ++i)   //转化
20         nu[j] = ar[i] - '0';
21     if(b < 0)    b = -b;    //去掉 b 的负号
22     for(j = 0, y = 0; j < len; )    //循环除法
23     {
24         x = y;
25         while(x <= b && j < len)
26         {
27             x = x * 10 + nu[j];
28             j++;
29         }
30         y = x % b;
31     }
32     if(y)   return false;
33     return true;
34 }
35 
36 int main()
37 {
38     int t, i = 1;
39     //freopen("in.txt", "r", stdin);
40     cin >> t;
41     while(t--)
42     {
43         scanf("%s%lld", ar, &b);
44         printf("Case %d: ", i++);
45         puts(option() ? "divisible" : "not divisible" );
46     }
47     return 0;
48 }

 刚才又写了一遍,用的java,刚学java,求不喷:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 /**
 5  * @author Administrator
 6  *
 7  */
 8 public class Main {
 9 
10     /**
11      * @param args
12      */
13     public static void main(String[] args) {
14         // TODO Auto-generated method stub
15         BigInteger a, b;
16         int t;
17         Scanner cin = new Scanner(System.in);
18         t = cin.nextInt();
19         for(int i = 1; i <= t; i++){
20             a = cin.nextBigInteger();
21             b = cin.nextBigInteger();
22             if(a.abs().mod(b.abs()).compareTo(BigInteger.ZERO) == 0){
23                 System.out.println("Case "+i+": divisible");
24             }
25             else {
26                 System.out.println("Case "+i+": not divisible");
27             }
28         }
29     }
30 
31 }

 

 

转载于:https://www.cnblogs.com/Duahanlang/p/3229401.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值