拆数—过河拆桥式玩法
1、拆数的精髓是将一个整数拆成每一位上的数独立存在。
2、拆数的工具 % 和 /。
3、拆数的必备条件是 拆不完不让走!
4、拆数的注意事项:如果在循环内,记得找个替身。
5、拆数的意义:无意义!拆数可以用于做回文数,做数字中的关键字统计或查看。
6、拆数的详细过程如下图。
举例说明:
1、输入一个数,将该数上各个位上的数相加。
输入样例:123
输出样例:6
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;//记得初始化sum
cin>>n;
while(n!=0){//没被拆完不让走
sum+=n%10;
n/=10;
}
cout<<sum<<endl;
return 0;
}
2、输入一个数n,输出n中有多少个x(0<=x<=9)。
输入样例:11 1
输出样例:2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,cnt=0;//记得初始化cnt
cin>>n>>x;
while(n!=0){//没被拆完不让走
if(n%10==x) {//判定拆出的数 是否是x
cnt++;
}
n/=10; //刽子手从来都不缺席
}
cout<<cnt<<endl;
return 0;
}
3、输入一个数n,输出1到n之间有多少个x(0<=x<=9)。
输入样例:11 1
输出样例:4
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,x,t,cnt=0;//记得初始化cnt
cin>>n>>x;
for(int i=1; i<=n; i++) {
t=i;//找替身,否则进入while循环 i出来永远是0,则for循环就成了死循环了
while(t!=0) { //没被拆完不让走
if(t%10==x) {//判定拆出的数 是否是x
cnt++;
}
t/=10; //刽子手从来都不缺席
}
}
cout<<cnt<<endl;
return 0;
}
4、输入两个数l、r,求从l到r之间有多少个x(0<=x<=9)。
输入样例:2 22 2
输出样例:6
#include<bits/stdc++.h>
using namespace std;
int main() {
int a,b,x,t,cnt=0;//记得初始化cnt
cin>>a>>b>>x;
for(int i=a; i<=b; i++) {
t=i;//找替身,否则进入while循环 i出来永远是0,则for循环就成了死循环了
while(t!=0) { //没被拆完不让走
if(t%10==x) {//判定拆出的数 是否是x
cnt++;
}
t/=10; //刽子手从来都不缺席
}
}
cout<<cnt<<endl;
return 0;
}
5、输入两个数l、r,求从l到r之间,0 至9共出现了多少次。
输入样例:1 11
输出样例:1 4 1 1 1 1 1 1 1 1
#include<bits/stdc++.h>
using namespace std;
int main() {
int a,b,x,t,cnt=0;//记得初始化cnt
int arr[11]={0};//初始化数组
cin>>a>>b;
for(int i=a; i<=b; i++) {
t=i;//找替身,否则进入while循环 i出来永远是0,则for循环就成了死循环了
while(t!=0) { //没被拆完不让走
arr[t%10]++;//类属于捅排的玩法
t/=10; //刽子手从来都不缺席
}
}
for(int i=0;i<10;i++){
cout<<arr[i]<<" ";
}
return 0;
}
拆数模块到这就差不多结束了,若关于本节中的取余,循环等知识点不懂,我稍后会补充扩展知识,然后放上链接。
谢谢大家,若有不足,欢迎批评指正,若需要补充,可私信我,谢谢!