7-2 到底有多二——string 取某个字符

7-2 到底有多二

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。

输入格式:

输入第一行给出一个不超过50位的整数N

输出格式:

在一行中输出N犯二的程度,保留小数点后两位。

输入样例:

-13142223336

输出样例:

81.82%

char [ ] :

#include <bits/stdc++.h>
//2019/07/18
using namespace std;

int main()
{
    char number[55];                    //数字太长,用字符数组生成字符串
    int i,length,conter=0;
    float n=100;
    scanf("%s",number);
    length=strlen(number);
    //printf("length=%d\n",length);
    if((number[length-1]-'0')%2==0)     //需要判断是否能被2整除,字符-'0'可得到整数值
            n*=2;                       //string类型也可,需要取出每个字符传换成char
    for(i=0;i<length;i++)
        if(number[i]=='2')
            conter++;
    if(number[0]=='-')                  //length-字符串长度,记录数字个数,有负号长度减一
        {                               //因为会改变字符串长度,所以最后判断--!!!
             n*=1.5;
            length--;
        }
    //printf("n=%f conter=%d length=%d\n",n,conter,length);
    n*=(1.0*conter/length);
    printf("%.2f%%",n);
    return 0;
}

 string : (string 取某个字符:at() 函数、[ i ]、迭代器)

#include <bits/stdc++.h>
//2019/07/18
using namespace std;

int main()
{
    string number;
    int conter=0,len;
    float n=100;
    char op;
    getline(cin,number);
    len=number.length();
    string::iterator ite;
    ite=number.begin();
    for(; ite!=number.end();ite++)
    {
        op=*ite;                        //迭代器获取字符
        //printf("%c\n",op);
        if(op=='2')
            conter++;
    }
    op=number.at(len-1);                //at()函数获取字符
    //printf("endchar=%c\n",op);
    if((op-'0')%2==0)
        n*=2;
    if(number[0]=='-')                  //[ ] 获取字符
    {
        n*=1.5;
        len--;
    }
    n*=(1.0*conter/len);                //c++保留两位小数的方法
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<n<<"%";
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值