1 条题解

  • 0
    @ 2026-5-27 10:25:16
    /*
    数字替换问题:
    检查数字N的各个数位上的数,如果是4,则改成8,
    全部检查完重新输出N 
    */
    
    //思路一:数位拆分法(仅使用一级知识点完成,显然过程非常复杂) 
    #include <iostream>
    using namespace std;
    int main(){
    	int n,t,x;
    	cin >> n;
    	//先获取数字n的位数,存入变量x中
    	x=0;
    	t=n;
    	while(t){
    		x++;
    		t/=10;
    	}
    	//通过数位拆分,逐个获取数位上的数字进行检查及更换
    	for(int i=x;i>=1;i--){
    		//将数位上的数字获取,并存入t 
    		if(i==1) t=n/1%10;
    		else if(i==2) t=n/10%10;
    		else if(i==3) t=n/100%10;
    		else if(i==4) t=n/1000%10;
    		else if(i==5) t=n/10000%10;
    		else if(i==6) t=n/100000%10;
    		else if(i==7) t=n/1000000%10;
    		else if(i==8) t=n/10000000%10;
    		else if(i==9) t=n/100000000%10;
    		//检查及替换 
    		if(t==4) cout << 8;
    		else cout << t;
    	} 
    	return 0;
    } 
    
    // 以上思路,使用二级知识点pow()可以简化一部分,如下
    #include <iostream>
    #include <cmath>
    using namespace std;
    int main(){
    	int n,t,x;
    	cin >> n;
    	//先获取数字n的位数,存入变量x中
    	x=0;
    	t=n;
    	while(t){
    		x++;
    		t/=10;
    	}
    	//通过数位拆分,逐个获取数位上的数字进行检查及更换
    	for(int i=x;i>=1;i--){
    		//将数位上的数字获取,并存入t 
    		t=n/int(pow(10,i-1))%10; //应用pow(a,b)进行10的i-1次方的计算,注意要使用int()进行转换为整数,否则有语法错误 
    		//检查及替换 
    		if(t==4) cout << 8;
    		else cout << t;
    	} 
    	return 0;
    } 
    
    //思路二:字符输入法(此方法很少见,仅使用一级知识点,但确实绝佳精妙) 
    #include <iostream>
    using namespace std;
    int main(){
    	char n; //注意采用字符来接收数字,实现一个字符一个字符的输入
    	while(cin >> n){
    		if(n=='4') cout << 8;
    		else cout << n;
    	} 
    	return 0;
    } 
    
    //思路三:字符串遍历法(使用三级知识点,和上述字符法类似)
    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
    	string s;
    	int len;
    	cin >> s;
    	len=s.size();
    	for(int i=0;i<len;i++){
    		if(s[i]=='4') cout << 8;
    		else cout << s[i];
    	}
    	return 0;
    } 
    
    • 1

    信息

    ID
    1261
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    44
    已通过
    9
    上传者