面试题集锦C++解答2

编程语言中比较常见的是C循环,例如C语言 (C++,java也类似): for (unsigned i = A; i != B; i += C) ; 表示i从A开始,只要不等于B,每次加C。 我们的目标是计算这个循环执行的次数。 假设我们的整数都是无符号的,计算机支持的int是k位的。(即所有整数都是非负并且小于2^k的,并且所有运算都对2^k取余数)。 输入格式 多组数据,每组数据占一行,包含4个整数A,B,C,k。(1<=k<=32, 0<=A,B,C<2^k)。 输出格式 对每组数据,输出一行,包含其循环次数,如果是死循环,输出-1。

注意:环境是32位系统的,所以注意K的取值判断

bool check(int num,int k){//检查数据的有效性
if(0>=k||0>num){
return false;
}
if(k>32){
return false;
}
int temp = pow((float)2,k);
if(num<=temp){
return true;
}
else{
return false;
}
}
int loopnum(int A,int B,int C,int K)///注意实际存在的整数表示范围2的K次方
{
int num = 0;
if(check(A,K)&&check(B,K)&&check(C,K)){
if(B<A){
return -1;
}
else{
if(C==0){
return -1;
}

}
num = (B-A)/C+1;
}
return num;
}
int _tmain(int argc, _TCHAR* argv[])
{
int num = loopnum(1,100,0,30);
cout<<"循环次数为:"<<num<<endl;
system("pause");
return 0;
}

本人暂时想到的就这些了,希望搞测试的朋友能够发现程序的不足之处,积极指正!不胜感激!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值