求助!写了半天还是不会用函数!

B2078 含 k 个 3 的数

chipqi_qi_ZJ @ 2024-11-11 22:06:30

#include<bits/stdc++.h>
using namespace std;
int m,k,ans=0;
int main(){
    cin>>m>>k;
    for(int i=0;i<=m;i++){
        if(m%10==3){
            ans++;
        }
        m/=10;
    }
    if(ans==k){
        cout<<"Yes";
    }
    else{
        cout<<"No";
    }
    return 0;
}

求救,已经过不了了,教练还让我们用函数写!(一个蒟蒻的愤怒)


by 13853265477zhou @ 2024-11-21 18:05:17

不用函数:

#include <bits/stdc++.h>
using namespace std;
int main(){
    long long m;
    int k,g=0;
    cin>>m>>k;
    while(m){
        if(m%10==3){
            g++;
        }
        m/=10;
    } 
    if(g==k){
        cout<<"YES";
    }else{
        cout<<"NO"; 
    }
}

by 13853265477zhou @ 2024-11-21 18:20:21

求互关


by luogu_00 @ 2024-11-21 21:42:31

你看一下 main 函数是怎么定义的就行了,你只需要一个函数:求出一个十进制数的第 i 位究竟是多少(例如 438 的第 2 位是 3,第 1 位是 4)。

注意题目中所说的数据范围是:

1≤m≤10^{15}

所以要用 long long 类型存储 m

代码:

#include<bits/stdc++.h>
using namespace std;
int len,k,ans=0;
long long m;//题目中的n的范围是10^15
int length(long long n){//求出n的十进制长度
    if(n<10) return 1;
    len=1;
    while(n>=10){
        len++;
        n/=10;
    }
    return len;
}
int bit(long long n,int i){//求出n的第i位
    len=length(n);
    for(int j=i;j<len;j++){
        n/=10;
    }
    return n%10;
}
int main(){//main主函数
    cin>>m>>k;
    len=length(m);
    for(int i=0;i<=len;i++){
        if(bit(m,i)==3){
            ans++;
        }
    }
    if(ans==k){
        cout<<"YES";//题目要求,是YES而不是Yes
    }
    else{
        cout<<"NO";//题目要求,是NO而不是No
    }
    return 0;
}

求关,这段代码可以AC


|