判断是否为连乘数字串

序号:#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 判断是否为连乘数字串的更多相关文章

  1. 【小米oj】找出单独的数字

    题目链接:https://code.mi.com/problem/list/view?id=2&cid=0&sid=26251#codearea 描述 给出N个数字.其中仅有一个数字出 ...

  2. C++ 判断字符串是否全是数字

    在实际的工作中,需要提取程序中的字符串信息,但是程序中经常将一些数字当做字符串来进行处理,例如表盘的刻度信息,这时候就需要判断字符串是否全为数字,来进行真正意义上的字符串提取.下面介绍了判断字符串是否 ...

  3. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  4. c#判断输入textbox是否为数字

    asp.net判断输入文字是否是数字 方案一:/**//// <summary> /// 名称:IsNumberic /// 功能:判断输入的是否是数字 /// 参数:string oTe ...

  5. Oracle中如何判断字符串是否全为数字,以及从任意字符串中提取数字

    本文介绍了判断字符串是否全为数字的4种办法,另外还介绍了一个translate函数的小技巧,从任意字符串中提取数字(调用2次translate函数).这个办法是一个公司同事发现的,用起来很方便,但理解 ...

  6. Java 如何判断一个字符是否是数字或字母

    在C++中, 可以用isdigit()判断一个字符是否是数字,可以用isalpha()判断一个字符是否是字母,还有很多,都在<cctype>头文件中 而类似的方法在JAVA中,则主要是Ch ...

  7. (转)java判断string变量是否是数字的六种方法小结

    java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolea ...

  8. java练习-判断字符串是否都是数字

    方法1: package everyDayPratise; public class IsAllNumber { public static boolean method1(String s) { i ...

  9. Java判断一个字符是否是数字的几种方法的代码

    在工作期间,将写内容过程经常用到的一些内容段做个记录,下面内容是关于Java判断一个字符是否是数字的几种方法的内容,希望能对码农们有好处. public class Test{ public stat ...

随机推荐

  1. Photon Server初识(五) --- 客户端连接服务端

    准备:Unity开开发IDE. 一.新建Unity3D项目 导入包,在资源下新建目录 Plugins .在之前解压的SDK目录 lib中找到 Photon3Unity3D.dll,拖到新建的目前下 二 ...

  2. nginx 实践配置

    nginx.conf文件 user root; worker_processes 1; error_log logs/error.log crit; #error_log logs/error.log ...

  3. MyBatis 源码篇-资源加载

    本章主要描述 MyBatis 资源加载模块中的 ClassLoaderWrapper 类和 Java 加载配置文件的三种方式. ClassLoaderWrapper 上一章的案例,使用 org.apa ...

  4. 使用 FTP 迁移 SQL Server 数据_迁移数据_快速入门(SQL Server)_云数据库 RDS 版-阿里云

    背景信息 阿里云数据库 SQL Server 版导入数据有如下限制: 仅支持导入 SQL Server 2005.SQL Server 2008.SQL Server 2008R2 版本数据 仅支持全 ...

  5. Visual Studio container tools require Docker to be running

    处理项目在生成时报错"Visual Studio container tools require Docker to be running" 最初win10上安装docker,项目 ...

  6. LeetCode:196.删除重复的电子邮箱

    题目链接:https://leetcode-cn.com/problems/delete-duplicate-emails/ 题目 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱 ...

  7. java中long类型转换为int类型

    由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一.强制类型转换 [java] l ...

  8. 许愿墙JQ

    <!doctype html> <html> <head>     <meta charset="utf-8">     <t ...

  9. 微信小程序跳到指定页面不生效

    wx.redirectTo({ url: './index', }) wx.navigateTo({ url: './index', }) 用了这两种都没生效,点击没跳转,也没报错 后来想了下是不是因 ...

  10. Spring Cloud(一)服务的注册与发现(Eureka)

    Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集 ...