C语言网1074-数字整除

来源:互联网 发布:ie浏览器打不开淘宝 编辑:程序博客网 时间:2024/06/06 09:11

原题链接:问题 1074: 数字整除

问题 1074: 数字整除

时间限制: 1Sec 内存限制: 128MB 提交: 601 解决: 134

题目描述

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

例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。

输入

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

输出

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

样例输入

  • 34
  • 201
  • 2098765413
  • 1717171717171717171717171717171717171717171717171718
  • 0

样例输出

  • 1
  • 0
  • 1
  • 0

提示

来源

湖南省第六届大学生计算机程序设计竞赛

题目解析

说实话,这道题目我刚看到就直接认为是大数减法,因为对于输入数据的精度很高,最开始的思路:先通过字符串的方式获取到输入样例,然后再提取到字符串最后的一个字符转为整数,通过写一个大数相减的函数实现一个大数减另一个整数,返回bool型。

这个想法其实不能说不聪明,我想这个应该也是很多人最开始就想到的方法,所谓的直接按照题目的意思来算

但是我们反过来再看题目的时候,这道题目其实就是想输入一个数据,然后叫我们判断是否是17的倍数而已,为什么还要大费周章的先去减一个数字然后再判断呢,这样反倒是增加了代码量,那我们就直接来计算17的倍数吧。

这时可能你就会先在自己仅有的脑容量里边去搜索各种各样的算法来计算大数的除法问题,我呢是推荐先自己实现下大数的除法是然后再来比对下这种方法,找出自己代码的优点和确定(为什么不直接说缺点呢,其实就是担心你的小心脏啦,哈哈哈,开个玩笑而已,每个算法都有自己的优点和缺点,只要用对了场合那么就是一个好算法,这就是算法的魅力)

胡扯了这么久,期待已久的代码来了,

#include <iostream>#include <string>using namespace std;int main (){    string s;    while(cin>>s){        if(s.at(0)=='0') break;        int sum=0,len=s.length();        for(int i=0;i<len;i++){            sum=sum*10+s[i]-'0';            sum%=17;        }        if(sum) cout<<0<<endl;        else cout<<1<<endl;    }    return 0;} 

如果觉得不错就点个赞,关注走起卅。
更多内容也可关注我的个人博客MgBlog

原创粉丝点击