小米oj 判断是否为连乘数字串
判断是否为连乘数字串
序号:#32难度:非常难时间限制:1000ms内存限制:10M
描述
给出一个字符串S,判断S是否为连乘字符串。 连乘字符串定义为: 字符串拆分成若干数字,后面的数字(从第三个数字开始)为前面2个数字的乘积。 例如: 122,可以拆成{1|2|2},有12=2 1122242,可以拆成{11|22|242},有1122=242 1224832256,可以拆成{1|2|2|4|8|32|256},有12=2,22=4,24=8,48=32,8*32=256。
若是连乘字符串,则输出true,否则输出false。(PS:不考虑乘以0)
输入
一个正整数字符串
输出
字符串true或者false,表示是否可以拆成连乘数字。
输入样例
122
113
1122242
复制样例
输出样例
true
false
true
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
ll num(int l,int r,string s)
{
ll res=0;
int len=r-l+1;
ll tmp=1;
for(int i=r;i>=l;i--)
{
res+=(s[i]-'0')*tmp;
tmp*=10;
}
return res;
}
bool ok2(ll a,ll b,string s)
{
ll next=a*b;
string tmp=std::to_string(next);
if(s.size()<tmp.size())return false;
if(s.size()==tmp.size())
{
return s==tmp;
}
if(s.size()>tmp.size())
{
int len=tmp.size();
for(int i=0;i<len;i++)if(s[i]!=tmp[i])return false;
string sub_s="";
for(int i=len;i<s.size();i++)sub_s+=s[i];
return ok2(b,next,sub_s);
}
}
bool ok(string s)
{
int len=s.size();
bool f=0;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
ll a=num(0,i,s);
ll b=num(i+1,j,s);
string sub_s="";
for(int t=j+1;t<len;t++)sub_s+=s[t];
if(ok2(a,b,sub_s)){f=1;break;}
}
if(f)break;
}
return f;
}
bool judge(string s)
{
return ok(s);
}
int main()
{
// freopen("in.txt","r",stdin);
string ss;
while(cin>>ss)
{
cout<<(judge(ss)?"true":"false")<<endl;
}
return 0;
}
小米oj 判断是否为连乘数字串的更多相关文章
- 【小米oj】找出单独的数字
题目链接:https://code.mi.com/problem/list/view?id=2&cid=0&sid=26251#codearea 描述 给出N个数字.其中仅有一个数字出 ...
- C++ 判断字符串是否全是数字
在实际的工作中,需要提取程序中的字符串信息,但是程序中经常将一些数字当做字符串来进行处理,例如表盘的刻度信息,这时候就需要判断字符串是否全为数字,来进行真正意义上的字符串提取.下面介绍了判断字符串是否 ...
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- c#判断输入textbox是否为数字
asp.net判断输入文字是否是数字 方案一:/**//// <summary> /// 名称:IsNumberic /// 功能:判断输入的是否是数字 /// 参数:string oTe ...
- Oracle中如何判断字符串是否全为数字,以及从任意字符串中提取数字
本文介绍了判断字符串是否全为数字的4种办法,另外还介绍了一个translate函数的小技巧,从任意字符串中提取数字(调用2次translate函数).这个办法是一个公司同事发现的,用起来很方便,但理解 ...
- Java 如何判断一个字符是否是数字或字母
在C++中, 可以用isdigit()判断一个字符是否是数字,可以用isalpha()判断一个字符是否是字母,还有很多,都在<cctype>头文件中 而类似的方法在JAVA中,则主要是Ch ...
- (转)java判断string变量是否是数字的六种方法小结
java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolea ...
- java练习-判断字符串是否都是数字
方法1: package everyDayPratise; public class IsAllNumber { public static boolean method1(String s) { i ...
- Java判断一个字符是否是数字的几种方法的代码
在工作期间,将写内容过程经常用到的一些内容段做个记录,下面内容是关于Java判断一个字符是否是数字的几种方法的内容,希望能对码农们有好处. public class Test{ public stat ...
随机推荐
- numpy数组常用计算
在说numpy库数组的计算之前先来看一下numpy数组形状的知识: 创建一个数组之后,可以用shape来查看其形状,返回一个元组 例如:a = np.array([[1, 2, 3], [4, 5, ...
- python如何切割字符串
python字符串的分割方法如下 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s: ...
- 怎样设置cookie的到期时间
1. 使用Cookie的: Expires 属性. 它可以设置cookie的过期时间. 下面的代码表示id这条cookie的过期时间是2015年10月21日早上7点28分; Set-Cookie: i ...
- where用法
where 子句用于指定类型约束. 1.接口约束 public class MyGenericClass<T> where T:IComparable { } 2.基类约束: 指出某个类 ...
- 路由器WAN口IP显示为10、100、172开头,网络被电信联通等运营商做了NAT转发
摘要:路由器WAN口IP显示为10.100.172开头,网络被电信联通等运营商做了NAT转发 ... 路由器WAN口IP显示为10.100.172开头的解决方法方法一:找电信(10000号)或者联通( ...
- 【QT学习笔记】二、信号槽和自定义信号槽
1. 信号槽 int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Qui ...
- 最简单的一个win32程序
#include <windows.h> HINSTANCE g_hInst = NULL; //2 窗口处理函数 LRESULT CALLBACK WndProc( HWND hWnd, ...
- html中正则匹配img
1.正则匹配html中的img标签,取出img的url并进行图片文件下载: /// <summary> /// 将image标签的src属性的url替换为base64 /// </s ...
- arcgis js之地图分屏同步
arcgis js之地图分屏同步 原理: 新建两个map两个view或者一个map两个view.对地图进行移动事件绑定,在地图移动时同步地图方位 代码: views.forEach((view) =& ...
- 给datagrid一列中的数据加上单位
{ field:'computeRate', title:'完成百分比', width:100, align:'center', halign:'center', sortable:true, for ...