整数拆分:
题目描述
小明最近在学习整数拆分,他在草稿纸上随手写下了一串数字,仅包含“0”~“9”这十种数字,长度不超过9。现在你可以在这串数字中选出任意一个子串(不能为空,可以是原串),不能以数字“0”开始。小明想要知道,这些可能的子串构成的数,有多少个比他心目中的幸运数字x更大。
注:子串只要在原串中的起始或者终止位置不同,就认为是不同的子串;子串和x都是十进制的。
输入
第一行输入一个数字串S,仅包含数字“0”~“9”这十种数字,长度不超过9。第二行包含一个整数x,表示小明的幸运数字。
输出
有多少个非“0”开始的子串,表示成十进制数后比x更大。样例输入 Copy
1023 12
样例输出 Copy
3
提示
子串“23”、“102”和子串“1023”,都要比12更大。对于50%的数据,S的第一个字母不超过“2”。
对于100%的数据,S仅包含数字“0”~“9”这十种数字,1<=S的长度<=9;0<=x<=777444111。 这两天是真的被双指针那些东西冲昏了头脑,真的真的,那么简单的一道题,为什么会被我做成那个样子 第一次想的太复杂了QAQ,nnd,我还在考虑位数和前导0啥的,位数相同的又干嘛干嘛。 返璞归真啊wc,上一下错误的代码,给自己一巴掌,hhh
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){ char ch[100]; int x,len,f=0,t=0; cin>>ch; cin>>x; len=strlen(ch); for(int z=1;z<=len;z++) { for(int i=0;i<len;i++) { if(ch[i]=='0') int f=1; for(int j=i;j<i+z;j++) { if(f==1) { int sum=0; for(int k=i;k<j;i++) { sum=sum+ch[i]-'0'; sum*=10; } if(sum/10>x) .
。
。
。
。(省略号,hhhh)
return 0; }
真狠啊.....
明明可以直接把每一个数遍历一遍,遇到0就下一个循环,然后只要大于x的就++;哪来那么多事....
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){ char ch[1000]; int len,x,t=0; cin>>ch; cin>>x; len=strlen(ch); for(int i=0;i<len;i++) { int sum=0; if(ch[i]=='0') continue; for(int j=i;j<len;j++) { sum=sum*10+(ch[j]-'0'); if(sum>x) t++; } } cout<<t<<endl; return 0; }