zoukankan      html  css  js  c++  java
  • 湖南省第六届大学生计算机程序设计竞赛---数字整除

    1008: 数字整除

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 6  解决: 4
    [提交][状态][讨论版]

    题目描写叙述

    定理:把一个至少两位的正整数的个位数字去掉。再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。

    比如。34是17的倍数。由于3-20=-17是17的倍数;201不是17的倍数,由于20-5=15不是17的倍数。

    输入一个正整数n。你的任务是推断它是否是17的倍数。

    输入

    输入文件最多包括10组測试数据。每一个数据占一行,仅包括一个正整数n(1<=n<=10100),表示待推断的正整数。n=0表示输入结束。你的程序不应当处理这一行。

    输出

    对于每组測试数据。输出一行,表示对应的n是否是17的倍数。

    1表示是,0表示否。

    例子输入

    34
    201
    2098765413
    1717171717171717171717171717171717171717171717171718
    0
    

    例子输出

    1
    0
    1
    0
    

    提示

    简单大数问题:

    開始以为就直接能够水过。这个代码直接wa了。

    #include <cstdio>
    #include <cstring>
    int main()
    {
       long long n;
       long long sum;
       while(scanf("%I64d",&n)&&n!=0)
       {
           sum=n/10-(n%10*5);
           if(sum%17==0)
            printf("1
    ");
           else
            printf("0
    ");
       }
        return 0;
    }
    后来就换用java做大数处理。

    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class nyist664 {
    	public static void main(String[] args) {
    		Scanner scanf=new Scanner(System.in);
    		while(scanf.hasNext())
    		{
    			BigInteger sum=scanf.nextBigInteger();
    			if(sum.equals(BigInteger.ZERO))
    				break;
    			BigInteger n = BigInteger.valueOf(5);//把int型换成大整数型
    		        BigInteger m=  BigInteger.valueOf(17);
    		        sum=sum.divide(BigInteger.TEN).subtract(sum.mod(BigInteger.TEN).multiply(n));//依照题意,去掉个位数。减去个位数乘以5的值
    			sum=sum.mod(m);//模17
    			if(sum.equals(BigInteger.ZERO))
    			{
    				System.out.println(1);
    			}
    			else 
    				System.out.println(0);
    		}
    
    	}
    
    }
    
    这是按题意这样做,直接就过了;

    或者直接依照java大数模17也能够过。

    import java.math.BigInteger;
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner scanf=new Scanner(System.in);
    		while(scanf.hasNext())
    		{
    			BigInteger sum=scanf.nextBigInteger();
    			if(sum.equals(BigInteger.ZERO))
    				break;
    			BigInteger n = BigInteger.valueOf(17);
    			//sum=sum.divide(BigInteger.TEN)-(sum.mod(BigInteger.TEN).multiply(n));//这里開始写错了
    			sum=sum.mod(n);
    			if(sum.equals(BigInteger.ZERO))
    			{
    				System.out.println(1);
    			}
    			else 
    				System.out.println(0);
    		}
    
    	}
    
    }
    
    后来看到别人用c++过的代码,直接用的整型,感觉整型应该不够啊。可是也过了;

    #include<stdio.h>
    int main()
    {
    	int i,sum;
    	char str[105];
    	while(scanf("%s",str)&&str[0]!='0')
    	{
    		sum=0;
    		for(i=0;str[i]!='';i++)
    		{
    			sum=sum*10+str[i]-'0';
    			sum=sum%17;
    		}
    		printf("%s
    ",sum?

    "0":"1"); } return 0; }

    这个代码也写的非常简洁,效率也非常高。




  • 相关阅读:
    openmediavault 5.5.23 安装插件失败的解决方案
    qt下载地址
    qt 5.12 增加 mysql驱动
    选基金标准
    关注几个基金
    调仓的几个问题
    要读的书
    ubuntu 20.04 LTS 安装webmin
    set的常见用法
    斜率优化dp([HNOI2008]玩具装箱)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5320196.html
Copyright © 2011-2022 走看看