大家好,又见面了,我是全栈君。
1008: 数字整除
题目描写叙述
定理:把一个至少两位的正整数的个位数字去掉。再从余下的数中减去个位数的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\n"); else printf("0\n"); } 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]!='#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?';i++) { sum=sum*10+str[i]-'0'; sum=sum%17; } printf("%s\n",sum?"0":"1"); } return 0;}
"0":"1"); } return 0;}
这个代码也写的非常简洁,效率也非常高。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115589.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...