NBUT1461 数字整除(大数处理,减法、除法)

数字整除

Description

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

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

Input

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

Output

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

Sample Input

34201209876541317171717171717171717171717171717171717171717171717180

Sample Output

1010

Hint

这道题被题目误导了,上来就根据题目给的方法进行计算了,过后回过头看看这道题,其实,直接就用代码中的除法部分直接计算对 17 取余就行,那些减去什么的都是没用的。

附上代码(根据题意的代码,读者可以自己根据中间的除法部分直接对 17 取余):

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

string str;

void sovle()
{
    int j = 0;
    int num1[110];
    int sum = str[str.length() - 1] - '0';
    for(int i = str.length() - 2;i >= 0;i--)
    {
        num1[j++] = str[i] - '0';
    }
    while(num1[0] <= sum * 5)                     //   减法部分
    {
        int t = 1;
        while(num1[t] == 0)
        {
            num1[t++] = 9;
        }
        num1[t] -= 1;
        num1[0] += 10;
    }
    num1[0] -= sum * 5;
    int sum1 = num1[j - 1];                      //   除法部分,对 17 取余部分
    j = j - 2;
    while(j >= 0)
    {
        sum1 = sum1 * 10 + num1[j--];
        sum1 %= 17;
    }
    if(sum1 == 0)
        cout << 1 << endl;
    else
        cout << 0 << endl;
}

int main()
{
    while(cin >> str)
    {
        if(str.length() == 1 && str[0] == '0')
           break;
        int ans = 0;
        for(int i = 0;i < str.length();i++)
        {
            ans = ans * 10 + (str[i] - '0');
            if(ans > 1000000)
            {
                break;
            }
        }
        if(ans <= 1000000)
        {
            int num = ans;
            int sum = num % 10;
            num /= 10;
            num -= sum * 5;
            if(num % 17 == 0)
                cout << 1 << endl;
            else
                cout << 0 << endl;
        }
        else
            sovle();
            str.clear();
    }
    return 0;
}

相关文章

发表回复

您的电子邮箱地址不会被公开。