• 题解1074:数字整除


    OI赛题

    题目描述

    定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的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

    首先我想到的是long long型直接算,在Dev上面写完代码后,可以运行,但当我提交到OJ是提示超限,果然不好欺骗吖!后面自己想喽!
    我的原始代码:
    #inlcude
    using namespace std;
    int main()
    {
    long long num;
    cin>>num;
    if(num%17==0)
    {cout<<‘1’;}
    else
    {
    cout<<‘0’;
    }
    }

    第一种解法

    Tips:

    1. 一个字符ch要转化为数字时,应该用这个字符减去’0’。 ch - ‘0’

    2. 一个数字num要转化为字符时,应该用这个数字加上’0’。 num + ‘0’

    #include <stdio.h>

    int main()
    {
    int result[10];
    int x = 0;

    int i = 0;
    int j = 0;
    
    char num;
    scanf("%c", &num);
    do
    {
        while (num != '
    ')
        {
            x *= 10;
            x += ch - '0'; //注意所有数字都是以字符形式读入,因此进行运算前需要进行 num - '0' 操作
            x %= 17;
            scanf("%c", &num);
        }
    
        if (x == 0)
        {
            result[i++] = 1;
        }
        else
        {
            result[i++] = 0;
        }
    
        x = 0;
        scanf("%c", &num);
    
    } while (num!= '0'); //输入的第一个字符不为'0',为'0'时退出
    
    for(j = 0; j < i; j++)
    {
        printf("%d
    ", result[j]);
    }
    
    return 0;
    

    }

    第二种解法(来自某位思路新奇的同学)

    利用小学的除法,进行反复的补位(在结果后面补上下一位)和取余数,最终得出结果

    #include<stdio.h>
     
    int main() {
        int x = 0;
        char ch;
        scanf("%c", &ch);
        do {
            while (ch != '
    ') {
                x *= 10;
                x += ch - '0';
                x %= 17;
                scanf("%c", &ch);
            }
            if (x == 0)
                printf("1
    ");
            else
                printf("0
    ");
            scanf("%c", &ch);
            x = 0;
        } while (ch != '0');
        return 0;
    }
    

    先记下来吧!!!

  • 相关阅读:
    【Android
    【Android
    GeoIP的使用
    从30岁到35岁:为你的生命多积累一些厚度[转]
    editplus运行php 配置
    zend studio10 创建重复project from remote server
    《淘宝技术这10年》
    顶级程序员的10条最佳实践
    PHP_EOL 换行符
    尝试用Gearman实现分布式处理(PHP)[转]
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832386.html
Copyright © 2020-2023  润新知