zoukankan      html  css  js  c++  java
  • 题解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;
    }
    

    先记下来吧!!!

  • 相关阅读:
    大数据经典学习路线(及供参考)
    Redis配置规范
    mysql中datetime和timestamp类型的区别
    bigint(10)和bigint(20)的区别
    Redis分布式锁,基于StringRedisTemplate和基于Lettuce实现setNx
    Spring security UserDetailsService autowired注入失败错误
    Java Print 打印
    Spring boot Junit Test单元测试
    RESTful作用与特性
    JS匿名函数理解
  • 原文地址:https://www.cnblogs.com/AmosAlbert/p/12832386.html
Copyright © 2011-2022 走看看