找出区间 [a,b] 中能被 7 整除或含有数字 7 的数的个数

来源:互联网 发布:首席数据官 美联储 编辑:程序博客网 时间:2024/05/12 03:44

找出区间 [a,b] 中能被 7 整除或含有数字 7 的数的个数?例如21、171等,输入a和b作为查找的区间啊[a,b],输出能被7整除或含有数字7的数的个数。如果对于C的初学者确实有点难度,但了解过一些整除转换为字符串的,在字符串查找某个字符的函数就容易了。不管怎样,先了解一下比较复杂的,也是我个人编写的,思路是这样的,先判断最高位是否含7,接着判断中间位是否含7,最后判断最低位是否含7和是否能被7整除(当然去除了最高位和中间为含7的),当查找到标记1。

#include <iostream>using namespace std;void main(){int a, b, i, count=0; //count记录7数int m,k,record; cin>>a>>b;  //a,b作为区间[a,b]for(i=a; i<=b; i++){ k=i; m=i/10;   record = 0; //record用来标记是否含7   while(k)     //判断最高位是否为7 { if(k==7) { count++;   k=0;    record=1; //标记已判断 } k /= 10;    } while(m && record!=1)   //判断中间是否含7,中间的意思就是出去最高位和最低位 {if(m%10==7){count++;m=0;   //找到了跳出循环record=1; //标记已判断}m /= 10;   } if((i%7==0 ||i%10==7) && record !=1)//标记过1就不用再判断了 { count++; }}cout<<count<<endl;}
功力不够写出这么复杂的代码,效率好低,后来我又发现别人的比我更好,学到了好多

先了解一下把整数转换为字符串的函数itoa和在字符串中查找某个字符的函数strchr

有了这两个函数就很容易了

#include <iostream>using namespace std;void main(){int i, count=0;int a, b;char str[12];cout<<"请输入两个整数作为区间(a<=b)"<<endl;cin>>a>>b;for(i=a; i<=b; i++){if((i%7==0)||(strchr(itoa(i,str,10),'7'))){count++;}}cout<<"能被 7 整除或含有数字 7 的数的个数为:"<<count<<endl;}