问题标题: 酷町堂:3725 出现次数

0
0
已解决
丁博扬
丁博扬
中级天翼
中级天翼

 

3725   出现次数      

经验值:0

题目描述 Description

输入一个正整数n(最大不超过long long),再输入一个整数m(m小于等于n的位数),求整数n中的从右到左的第m个数字,在整数n中的个数。

输入描述 Input Description

输入两个空格隔开的整数n 、m

输出描述 Output Description

输出第m个数在n中出现的次数。

样例输入 Sample Input

1223334444 5

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

从右往左第5个数是3,3在1223334444中出现了3次。  

 

 

错误代码:

#include<iostream>
using namespace std;
int cnt=1,sum;
int main(){
    long long a,b,c,d;
    cin>>a>>b;
    d=a;
    while(a!=0){
        a/=10;
        cnt++;
        if(cnt==b){
            c=a%10;
        }
    }
    while(d!=0){
        if(d%10==c)
            sum++;
        d/=10;
    }
    cout<<sum;
    return 0;
}

请各位大佬帮忙看一下

丁博扬在2021-01-25 08:24:48追加了内容

我总感觉我好像是从左往右数的

请问从右往左应该怎么写

丁博扬在2021-01-25 09:02:37追加了内容

丁博扬在2021-01-25 09:05:18追加了内容

#include<iostream>
using namespace std;
int cnt=1,sum;
int main(){
    long long a,b,c,d;
    cin>>a>>b;
    d=a;
    while(a!=0){
        cnt++;
        if(cnt==b){
            c=a%10;
        }
        a/=10;
    }
    while(d!=0){
        if(d%10==c)
            sum++;
        d/=10;
    }
    cout<<sum;
    return 0;
}

40分代码

丁博扬在2021-01-25 09:09:24追加了内容


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

a/=10应该放在判断后面,不然会多算一位,你可以输出c试试

测试样例:34 1

你的代码如果输出c是3

汪恺恒在2021-01-25 09:04:47追加了内容
while(n){
		cnt++;
		n/=10;
		if(cnt==m){
			pos=n%10;
		}
	}

之后不变

汪恺恒在2021-01-25 09:05:40追加了内容

发错了

while(n){
		cnt++;
		if(cnt==m){
			pos=n%10;
		}
         n/=10;
	}

 

0
徐婧芸
徐婧芸
修练者
修练者

把cnt设为0
    while(d!=0){
        if(d%10==c){
            sum++;
        }
        d/=10;
    }
    cout<<sum;

就可以了

我要回答