前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >湖南省第六届大学生计算机程序设计竞赛—数字整除

湖南省第六届大学生计算机程序设计竞赛—数字整除

作者头像
全栈程序员站长
发布2022-07-10 12:26:43
3270
发布2022-07-10 12:26:43
举报

大家好,又见面了,我是全栈君。

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表示否。

例子输入

代码语言:javascript
复制
34
201
2098765413
1717171717171717171717171717171717171717171717171718
0

例子输出

代码语言:javascript
复制
1
0
1
0

提示

简单大数问题:

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

代码语言:javascript
复制
#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\n");
       else
        printf("0\n");
   }
    return 0;
}

后来就换用java做大数处理。

代码语言:javascript
复制
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也能够过。

代码语言:javascript
复制
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++过的代码,直接用的整型,感觉整型应该不够啊。可是也过了;

代码语言:javascript
复制
#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]!='\0';i++)
		{
			sum=sum*10+str[i]-'0';
			sum=sum%17;
		}
		printf("%s\n",sum?"0":"1");	}	return 0;}

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115589.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1008: 数字整除
  • 题目描写叙述
  • 输入
  • 输出
  • 例子输入
  • 例子输出
  • 提示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档