精华内容
下载资源
问答
  • stringObject.substr(1).substring(-1,0) //就是可行啦这里就顺便说个截取时间啦,现在都是有那种想把个位变为两位。如9展现为09以便于格式对齐。很多地方都是判断这个数字是否小于10,来确定添加0如
  • 、题目分析 很经典的一个题目。采用贪心策略。...思路:依次遍历正整数各位数字,将单调递减区间数字删掉,如果整个字符已经单调递增排列话,将最后一个删除. 代码(OJ上没有找到这道题,

    一、题目分析

    很经典的一个题目。采用贪心策略。

    这个题目其实可以分成两个小题。

    1),使剩下的数最小。

    2),使剩下的正整数最小。这时,删除的数字数s 就不能等于 n。以及删除后等于0或0...0就不行了。


    1, 使剩下的数最小。

    思路:依次遍历正整数的各位数字,将单调递减区间的第一个数字删掉,如果整个字符串已经单调递增排列的话,将最后一个删除.

    代码(OJ上没有找到这道题,所以仅测试了自己想到的测试用例):

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int k;
        string s;
        while (cin >> s >> k) {
            if (k > s.size()) {
                cout << "Invalid Input.";
                continue;
            }
            while (k) {
                int i;
                for (i = 0; i < s.size() - 1 && s[i] <= s[i + 1]; i++);
                s.erase(i, 1);
                k--;
    
            }
            if (s.empty()) {
                cout << 0 << endl;
                continue;
            }
    
            int i = 0;
            for (i = 0; i < s.size()-1;) {
                if (s[i] == '0') i++;
                else break;
            }
            cout << s.substr(i) << endl;
        }
    }

    
    

    2,使剩下的正整数最小。

    比如输入100100,删除2位。如果删除1 1,则剩下0000,为数字。而数字0不是正整数,不符合要求。
    此时,删除2位后还是正整数的有:
    0100
    1000
    1001
    0010
    最小的正整数为0010.
    而这个时候处理的想法(若有错,望指出)是:从右往左找到第一个不为0的数字,替换掉0...0中一个0,得到新的正整数。
    如果这个数字在个位,那么新的正整数就是这个个位数。
    如果这个数字在个位以外,新的正整数会比以这个数字向右组成的数小10倍。
    具体做法如下:
    如100100,从右向左找到1在百位上,那么新的正整数为10.
    代码:
    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int k;
        string s;
        while (cin >> s >> k) {
            if(k >= s.size()) {cout << "Invalid Input.";continue;}
            string tmp = s;
            while(k) {
                int i;
                for(i = 0; i < s.size()-1 && s[i] <= s[i+1]; i++);
                s.erase(i, 1);
                k--;
    
            }
    
            bool flag = false;
            for(auto &item : s) {
                if (item != '0') {flag = true;break;}
            }
    
            if(!flag) {
                string ans = "";
                int i = tmp.size()-1, cnt = 0;
                while(tmp[i] == '0') {i--; cnt++;}
                ans += tmp[i];
                for(i = 1; i < cnt; i++) ans += '0';
                cout << ans << endl;
            } else {
                int i = 0;
                for(i = 0; i < s.size();) {
                    if(s[i] == '0') i++;
                    else break;
                }
                cout << s.substr(i) << endl;
            }
    
        }
        return 0;
    }



    展开全文
  • 提取字符的数字并分别保存

    千次阅读 2008-12-17 01:43:00
    在论坛看到一位朋友提,很简单东西,就大概写了... 这里有种做法,种是考虑提取出来数是否为0开头,如果是0开头则去掉前面0;另种是不考虑这个问题。这只是在最后的输出上加不加个判断和处理问题。

    在论坛看到一位朋友提的,很简单的东西,就大概写了个,权当顺便复习下字符操作函数。
    题目:C++里一个字符串,比如"100,10"或者"100 10",怎么样才能把100和10分别提取出来,保存到2个数组里或者保存到分开的2个字符串里?
    这里有两种做法,一种是考虑提取出来的数是否为0开头,如果是0开头则去掉前面的0;另一种是不考虑这个问题。这只是在最后的输出上加不加一个判断和处理的问题。
    源程序分别如下:
    //(1)去掉数开始的0的
    #include
    #include
    #include
    #include
    using namespace std;
    int main()
    {
    string Str,Str1;
    vector S;
    cout<<"Input your string:";
    getline(cin,Str);
    for(string::size_type i=0;i!=Str.size();++i)
    {
    if(isdigit(Str[i]))
    {
    Str1.push_back(Str[i]);
    }
    else if(Str1.size()!=0)
    { S.push_back(Str1);
    Str1="";
    }
    }
    if(Str1.size()!=0)
    {
    S.push_back(Str1);
    }
    for(vector::size_type j=0;j!=S.size();++j)
    {
    vector::size_type k=0;
    while(k{
    k++;
    }
    for(;kcout<cout<<" ";
    }
    cout<return 0;
    }
    //(2)不考虑数开始的0的
    #include
    #include
    #include
    #include
    using namespace std;
    int main()
    {
    string Str,Str1;
    vector S;
    cout<<"Input your string:";
    getline(cin,Str);
    for(int i=0;i!=Str.size();++i)
    {
    if(isdigit(Str[i]))
    {
    Str1.push_back(Str[i]);
    }
    else if(Str1.size()!=0)
    { S.push_back(Str1);
    Str1="";
    }
    }
    if(Str1.size()!=0)
    {
    S.push_back(Str1);
    }
    for(int j=0;j!=S.size();++j)
    cout<cout<return 0;
    }
    字符操作函数有时候还真是少不了用,把cctype头文件里的一些贴个在下面再好好看看。

    1. isalnum(c) 如果c是字母或数字,则为true
    2. isalpha(c) 如果c是字母,则为true
    3. iscntrl(c) 如果c是控制字符,则为true
    4. isdigit(c) 如果c是数字,则为true
    5. isgraph(c) 如果c不是空格,但可打印,则为true
    6. islower(c) 如果c是小写字母,则为true
    7. isprint(c) 如果c是可打印的字符,则为true
    8. ispunct(c) 如果c是标点符号,则为true
    9. isspace(c) 如果c是空白字符,则为true
    10. isupper(c) 如果c是大写字母,则为true
    11. isxdigit(c) 如果c是十六进制数,则为true
    12. tolower(c) 如果c是大字字母,则返回其小写字母形式,否则直接返回c
    13. toupper(c) 如果c是小写字母,则返回其大写字母形式,否则直接返回c
    展开全文
  • 这道题是不是难倒小伙伴们啦哈哈哈,这...———先说整数,很简单STL中的reserve+迭代器,轻松解决,然后去掉前导零就欧克了,至于百分数嘛,百分数一定是在字符串的最后一位,一定要保留下来,反转后加上%,然后去掉

    这道题是不是难倒小伙伴们啦哈哈哈,这个升级版有点坑,思路比较简单,但是代码实现比较麻烦,小孱弱弱不才,犯了好多错误才AC,哈哈哈,没事,我的方法注定是大多数人能理解的,下面我们说一说:
    ———首先呢,它有四种情况:百分数(百分号-%),小数(小数点-.),分数(除号-/)整数 ,我们可以大致分成两类,百分数和整数一类,小数和分数一类。
    ———先说整数,很简单STL中的reserve+迭代器,轻松解决,然后去掉前导零就欧克了,至于百分数嘛,百分数一定是在字符串的最后一位,一定要保留下来,反转后加上%,然后去掉前导零,欧克了。
    ———小数和分数,先遍历字符串,用一个变量记住符号位的位置,然后将前半部分和后半部分分别像处理整数那样,然后整合到原始字符串输出即可。简单不,高兴的有点早哈哈哈,后面就来坑了,所有的部分都可能是0,我就因为这个掐住两次,呜呜呜呜
    ———今天看到一句话感觉不错:凡为过往,皆为序章,承认失败,砥砺前行!!最为最文艺的小哥哥我,当然若有所思哈哈哈哈哈哈哈
    上代码:

    #include <iostream>
    #include <algorithm>
    using namespace std; 
    string str;
    	
    void fun1(int n)
    {
    	if(n==1||n==2)//小数或者除号 
    	{
    		int p;
    		for(int i=0;i<str.size();i++)
    		{
    			if(str[i]=='.'||str[i]=='/')
    			{
    				p=i;
    				break;
    			}
    		} 
    		string temp1(str.begin(),str.begin()+p);
    		string temp2(str.begin()+p+1,str.end());
    		string a(str,p,1);
    		if(temp1!="0")
    			while(temp1[0]=='0')
    				temp1.erase(temp1.begin());
    		if(temp2!="0")
    			while(temp2[0]=='0')
    				temp2.erase(temp2.begin());
    		reverse(temp1.begin(),temp1.end()); 
    		reverse(temp2.begin(),temp2.end()); 
    //		cout<<temp1<<' '<<temp2<<endl;
    		if(temp1!="0")
    			while(temp1[0]=='0')
    				temp1.erase(temp1.begin());
    		if(temp2!="0")
    			while(temp2[0]=='0')
    				temp2.erase(temp2.begin());
    		str.clear();
    		str.append(temp1);
    		str.append(a);
    		str.append(temp2);
    //		cout<<temp1<<' '<<temp2<<endl;
    	} 
    	if(n==3)//无符号 
    	{
    		if(str=="0%")
    		{
    			cout<<"0%";
    			return ;
    		}
    		while(str[0]=='0')
    			str.erase(str.begin());
    		reverse(str.begin(),str.end()-1); 
    		while(str[0]=='0')
    			str.erase(str.begin());
    	}
    	if(n==4)//百分号 
    	{
    		while(str[0]=='0')
    			str.erase(str.begin());
    		reverse(str.begin(),str.end()); 
    		while(str[0]=='0')
    			str.erase(str.begin());
    	}
    	cout<<str;
    		
    }
    int main()
    {
    	cin>>str;
    	for(int i=0;i<str.size();i++)
    	{
    		if(str=="0")
    		{
    			cout<<0;
    			return 0;
    		}
    		if(str[i]=='%')
    		{
    			fun1(3);
    			return 0;
    		}
    		else if(str[i]=='.')
    		{
    			fun1(1);
    			return 0;
    		}
    		else if(str[i]=='/')
    		{
    			fun1(1);
    			return 0;
    		}
    		
    	} 
    	fun1(4);
    	
    	return 0;
    }
    
    展开全文
  • 如题:这道题有种方法解决,但其实思想都是个思想,首先分析题目,无非就是如果个数在0-25范围...单独翻译话:那么是不是去掉最后一位,前i-1和前i方案种类不变所以dp[i]=dp[i-1]; 如果个合在一起翻译:.

    在这里插入图片描述
    如题:这道题有两种方法解决,但其实思想都是一个思想,首先分析题目,无非就是如果一个数在0-25范围内就可以翻译成相应的字母,在这之外就不行了,那么分析单个数,一定可以翻译,那么分析两个数合在一起,如果大于25或者像05这种小于10的则不可翻译,那我们从末尾看起,

    如果说末尾两个数可以翻译,那最后一个数就有两种翻译方式供我们选择,一个是单独翻译,一个是和它前面的数两个合在一起翻译。
    单独翻译的话:那么是不是去掉最后一位,前i-1位和前i位方案种类不变所以dp[i]=dp[i-1];
    如果两个合在一起翻译:那么就去掉最后两位,去考虑前面i-2位的翻译方案dp[i]=dp[i-2];
    那么最后两个方式方案数相加得出dp[i]=dp[i-1]+dp[i-2];
    如果末尾两位合起来>25或者<10,不能一起翻译,那么这种情况最后一个数是不是只有一种方式可以选择就是单独翻译所以此时只能dp[i]=dp[i-1];

    然后依次类推,就可得出结果

    class Solution {
    public:
        int translateNum(int num) {
            if(num<10)return 1;
          int re=num%100;
          if(re<10||re>25){
              return translateNum(num/10);
          }
          else{
              return translateNum(num/10)+translateNum(num/100);
          }
        }
    };
    

    上面这个代码大部分人认为是回溯法,就是以一种方案一直递归下去,结束后返回再进行第二种方案递归,但如果说你从动态规划的角度去考虑,从右往左遍历,是不是思想也是一致的呢,跟动态规划方程一致?
    当然这种方案可以认为是回溯法+递归解决问题,接着我将更新一个纯动态规划方法:

    class Solution {
    public:
        int translateNum(int num) { 
          string s=to_string(num);
          vector<int> dp(s.size()+1,0);
          dp[0]=dp[1]=1;
          for(int i=2;i<=s.size();i++){
              int m=stoi(s.substr(i-2,2));
              dp[i]=(m<10 || m>25)?dp[i-1]:dp[i-2]+dp[i-1];
          }
          return dp[s.size()];
        }
    };
    
    展开全文
  • 本以为就句话事,没想到看了看后台返回数据是带有千分位分隔符字符,那就只能先去掉分隔符再转数字,然后相加,最后加上分隔符,其中还遇到了个小问题,四舍五入整数话不会保留小数点,,enenen,需求是...
  • 个只有数字的字符,将它划分成多个子字符,并且成斐波那契数列。每个数字不能以0开头,除了0本身。 Input: “11235813” Output: [1,1,2,3,5,8,13] 用回溯法,关键点是 子字符可能很长所以转化成long型...
  • 比如,输入字符"abcdefg"和数字2,该函数将返回左旋转两位得到结果"cdefgab"。(来源力扣) 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2: 输入: s = “lrloseumgh”, k = 6 输出: ...
  • n(-84~127) 可以存储正数、负数、零、定点数和精度为38的浮点数,其中,M表示精度,代表数字的总位数;N表示小数点右边数字的位数 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月...
  • pat1038

    2018-03-03 23:00:14
    问就是要将找出各个字符如何组合才能使得组成的数字...在写cmp函数时,我的思路是:从前到后比较个字符的每一位,找到第一位不同的时候就返回这位数字的大小比较,如果直到个字符结束时都全部一样,...
  • 因此,这个函数在括号中参数表都由以下部分组成: “格式控制”,参数表 格式控制个字符,必须用双引号括起来,它表示了输入输出量数据类型。各种类型格式表示法可参阅第三章。在printf函数中...
  • 3.18 需要根据条件把个复杂表达式赋给个变量中的一个。可以用下面这样代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样表达式。a?b=c:d有些编译器可以接受,有些却不能。为...
  • 如何提取一串数字数字(字符) 如何把一个单元格中数字挑出来 分割文本 按照给定位数,截断小数点后数字 单元格数字提取问题 以关键字提取名称 如何把文本中前几个字符去除 对一列中文字统一去掉...
  • hdu1404 博弈

    万次阅读 2017-08-27 17:28:49
    /* 题意:给个长度不超过6字符的数字字符。...问最后去掉数字的算赢。问先手有木有必胜策略。 题解:可以通过SG函数的性质。暴力吧1-1e6每个数字的状态求出来。能一步到达必败状态的都为必胜点
  •  实例075 使用正则表达式验证两位小数 91  实例076 使用正则表达式验证一年12个月份 92  实例077 使用正则表达式验证个月31天 93  实例078 使用正则表达式验证数字输入 94  实例079 使用正则表达式...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    3.18 需要根据条件把个复杂表达式赋给个变量中的一个。可以用下面这样代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样表达式。a ? b=c : d 有些编译器可以接受...
  • 不只是有纯小数第一位是0,可能会出现类似00123这样数,因此要对字符进行预处理,去掉前导0 实现 思路 首先将所有数分成类: 整数部分为0 整数部分不为0 首先,对这种情况分别获取他们指数大小,并且...
  • 3.18 需要根据条件把个复杂表达式赋给个变量中的一个。可以用下面这样代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样表达式。a ? b=c : d 有些编译器可以接受...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    如何提取一串数字数字(字符) 如何把一个单元格中数字挑出来 分割文本 按照给定位数,截断小数点后数字 单元格数字提取问题 以关键字提取名称 如何把文本中前几个字符去除 对一列中文字统一去掉...
  • 3.18 需要根据条件把个复杂表达式赋给个变量中的一个。可以用下面这样代码吗?((condition)?a:b)=complicated_expression;  3.19 我有些代码包含这样表达式。a?b=c:d有些编译器可以接受,有些却不能。...
  •  3.18 需要根据条件把个复杂表达式赋给个变量中的一个。可以用下面这样代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样表达式。a?b=c:d有些编译器可以接受,有些却不能。...
  • 给定个32位的有符号整数,实现数字反转。这道题用是字符反转方法,但是用整数求余方法可能会方便许多。思路大致如下: 将整数转化成字符,再用[0:0:-1]切片方法进行反序,最后再将反序后字符转换...
  • delphi通用函数单元

    2011-08-19 20:38:47
    {//得到本年的最后一天} function DaysBetween(Date1, Date2: TDateTime): integer; {//得到个日期相隔的天数} //▎============================================================▎// //▎===================...
  • Stateful Session Bean 与 Stateless Session Bean ,这 Session Bean都可以将系统逻辑放在 method之中执行,不同是 Stateful Session Bean 可以记录呼叫者状态,因此通常来说,个使用者会有个相对应...
  • 某歌手大赛,共有十个评委给选手打分,分数采用百分制,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的最后成绩。 (20)统计 输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3.12 我需要根据条件把个复杂表达式赋值给个变量中的一 个。可以用下边这样代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

去掉一串数字的最后两位