hsen


私信TA

用户名:hsen

访问量:626

签 名:

等  级
排  名 51165
经  验 245
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 江苏海洋大学
专  业

  自我简介:

解题思路:

注意到范围较大超出整型范围 (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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区