![](https://csdnimg.cn/release/download_crawler_static/87651939/bg3.jpg)
int find(int x,int y,int m) //在[x,y]区间查找关键字等于 m 的元素下标
{ int head,tail,mid;
head=x;tail=y;mid=((x+y)/2);//取中间元素下标
if(a[mid]==m) return mid;//如果中间元素值为 m 返回中间元素下标 mid
if(head>tail) return 0;//如果 x>y,查找失败,返回 0
if(m>a[mid]) //如果 m 比中间元素大,在后半区间查找,返回后半区间查找结
果
return find(mid+1,tail);
else //如果 m 比中间元素小,在前半区间查找,返回后前区间查找结果
return find(head,mid-1);
}
六、高精度加法
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string str1,str2;
int a[250],b[250],len; //数组的大小决定了计算的高精度最大位数
int i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>str1>>str2; //输入两个字符串
a[0]=str1.length(); //取得第一个字符串的长度
for(i=1;i<=a[0];i++) //把第一个字符串转换为整数,存放在数组 a 中
a[i]=str1[a[0]-i]-'0';
b[0]=str2.length(); //取得第二个字符串长度
for(i=1;i<=b[0];i++) //把第二个字符串中的每一位转换为整数,存放在数组 B
中
b[i]=str2[b[0]-i]-'0';
len=(a[0]>b[0]?a[0]:b[0]); //取两个字符串最大的长度
for(i=1;i<=len;i++) //做按位加法,同时处理进位
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
len++; //下面是去掉最高位的 0,然后输出。
while((a[len]==0)&&(len>1)) len--;
for(i=len;i>=1;i--)
cout<<a[i];
return 0;
}