B4496 [GESP202603 一级] 数字替换

题目描述

Alice 不喜欢数字 444,但觉得数字 888 寓意好,她想把数中的 444 全都替换成 888,若数中不含 444 则无需修改,你能帮帮她吗?

输入格式

输入一行,包含一个整数 AAA,表示替换前的数。

输出格式

输出一行,包含一个整数 BBB,表示替换后的数。

输入输出样例 #1

输入 #1

8459045

输出 #1

8859085

输入输出样例 #2

输入 #2

123

输出 #2

123

说明/提示

样例解释

对于样例 111,输入 845904584590458459045 中有两个 444,都将其替换为了 888,得到 885908588590858859085

对于样例 222,输入 123123123 中不包含 444,无需修改输入数字,输出 123123123

数据范围

保证 0≤A≤1080\leq A\leq 10^80A108

解析

1.循环输入字符版:

#include <bits/stdc++.h>
using namespace std;
int main(){
    char c;
    while(cin>>c){//循环输入单个数字字符
        if (c=='4') c='8';//如果是4,改成8
        cout<<c;//输出
    }
    return 0;
}

2.拆位再组合

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a;
	cin>>a;
	int ans=0;//答案
	int q=1;//每一位的权重,个位1,十位10,百位100...
	while(a>0){
		int d=a%10;//拆出每一位
		if (d==4) d=8;//如果是4,改成8
		ans+=d*q;//按位权重重新组合
		a/=10;//去掉最后一位
		q*=10;//下一次循环,位权重乘十
	}
	cout<<ans;
	return 0;
}

3.逐位判断修改:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i*=10){
    	if (n/i%10==4){
    		n+=4*i;
		}
	}
	cout<<n;
    return 0;
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐