ganmu


私信TA

用户名:dotcpp0726067

访问量:3495

签 名:

等  级
排  名 1522
经  验 2812
参赛次数 0
文章发表 104
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

用用户输入的数据取模17即可得知是否为17的倍数

注意事项:

1、由于输入的是大数据,即用普通的int,long等装不下,故可用字符数组的方式容纳此数

2、需要明白字符数组中的值转换为int数字类型的方法

即:char[0]='1',此处的‘1’属于字符类型,不可进行运算,但可把它转换成数字类型即可运算

转换方法:char[0]-'0',此处转换后的结果1则为数字类型

若要把数字类型转换成字符类型,

可用:int a=1,此处为数字类型的1

a+'0',此时转换后结果为‘1’,字符类型

3、在编译时需要调用头文件#include<bits/stdc++.h>,否则网页编译器报错


代码中for循环中的代码解析:

sum = (sum * 10 + a[i] - '0') % 17;

举个例子:

假设用户输入的数据为34;

则:sum=(0*10+‘3’-‘0’)%17=(0+3)%17 =3       此处sum起始值为0,用户输入的值为34,但在for循环中第一次录入的值为字符‘3’,利用字符转数字的方法转化成数字3(即:‘3’-‘0’)再取模17

进入第二次循环:

sum=(3*10+'4'-'0')%17=(30+4)%17=0


参考代码:

#include<bits/stdc++.h>

#include<iostream>

using namespace std;

int main() 

{

    char a[100];//定义字符型数组记录用户输入的数据

    while (cin >> a && a[0] != '0')//死循环,用户输入数据,但当用户输入为0时退出循环,即a[0],第一个输入的字符为'0'

    {

        int sum = 0;//用于记录总数

        for (int i = 0; i < strlen(a); i++)//遍历用户输入的字符数组

        {

            sum = (sum * 10 + a[i] - '0') % 17;//向上递增逐步求出用户输入的数据取模17的值(此处看不懂则看上述解释)

        }

        if (sum == 0)//是17的倍数

            cout << 1 << endl;

        else//不是17的倍数

            cout << 0 << endl;

    }

    return 0;

}



 

0.0分

0 人评分

  评论区

  • «
  • »