19.循环数
- 【知识补充】---类似查找重复字符串
- 【问题描述】
- 【输入形式】
- 【输出形式】
- 【样例输入】
- 【样例输出】
- 题解
- 思路
- 代码
【知识补充】—类似查找重复字符串
[如何用JavaScript征服Leetcode?]1.重复的子字符串
大家看一下思路就可以了,这个题解是用JS写得,但是有C基础应该看得懂的!
【问题描述】
循环数是n位长度的整数,当乘以从1到n的任何整数时,产生原始数字的“循环”。也就是说,如果考虑最后一个数字之后的数字“绕”回到第一个数字,两个数字中的数字序列将是相同的,尽管它们可能从不同的位置开始。例如,数字142857是循环的,如下表所示:
142857 *1 = 142857142857 *2 = 285714142857 *3 = 428571142857 *4 = 571428142857 *5 = 714285142857 *6 = 857142
编写一个程序来确定数字是否是循环数。
【输入形式】
输入一个数,长度在2到60位之间(请注意,前面的零不应该被删除,它们被认为是确定n的大小和计数的一部分,因此,“01”是一个两位数的数字,与“1”是一个一位数的数字不同。) 。
【输出形式】
对于每个输入,输出一行(Yes或No)标识它是否是循环数。
【样例输入】
142857
【样例输出】
Yes
题解
思路
- 1.字符串*2得到包含所有循环情况的字符串ss
- 2.s转num,for循环乘以i(1-s.length()),然后结果转字符串new_s
- 3.我们看ss中是否包含new_s即可!
- 注意:题解测试数据5没有通过,没有找到原因!
代码
#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
using namespace std;
/*****************字符串转整型*************************/
int to_int(string str){int ans;stringstream ss;ss<<str;ss>>ans;return ans;
}
/*****************整型转字符串*************************/
string to_str(int num){string ans;stringstream ss;ss<<num;ss>>ans;return ans;
}
int main(){string s,ss;cin>>s;ss=s+s;//两倍原字符串方便find,两倍之后可以包含所有循环的情况 for(int i=1;i<=s.length();i++){int s_num=to_int(s);int temp=s_num*i;string new_s=to_str(temp);if(ss.find(new_s)==string::npos){cout<<"No"<<endl;return 0;} }cout<<"Yes"<<endl;return 0;
}