解题思路:

注意到范围较大超出整型范围 (1~10^100)

又注意到题目给出的方法可以减少数字位数

那么可以递归这个方法

直至整型可以存放


注意事项:

参考代码:

#include <iostream>
#include <string>
using namespace std;
int tran(string, int);//递归转化字符串为数字
string minu(string, char, int);//简易的字符串减法

int main()
{
    string str;
    cin >> str;
    while (str != "0") //判断结束
    {
        if(tran(str,str.length())%17==0)
            cout << 1 << endl;
        else
            cout << 0 << endl;
        cin >> str;
    }
    return 0;
}

int tran(string str, int len)
{
    if (len < 10)//递归终止条件因为 int 2^32-1是10位数
    {
        int num=0;
        for(char c:str)
            num=num*10+int(c-48);
        return num;
    }
    char x=str[len-1];//保存末尾
    str = str.substr(0,len-1);//去掉末尾
    for (size_t i = 0; i < 5; i++)//减去尾数的五倍改为循环五次减去尾数
        str = minu(str,x,str.length()-1);
    return tran(str, len-1);
}

string minu(string str, char x, int pos)
{
    if (pos==0)
    {
        if (str[0]=='1')
            return str.substr(1,str.length());
        else
        {
            str[0]-=1;
            return str;
        }
    }
    if (str[pos]-x<0)
    {
        str[pos]=str[pos]-x+58;
        str = minu(str,'1',pos-1);
        return str;
    }
    str[pos]=str[pos]-x+48;
    return str;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论