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

找出区间 [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;
}



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值