【求助】中软国际C++程序员笔试题

clydey 2013-01-06 09:56:40
1、有一个16位的整数,求其二进制上每4位的数字之和。 例如:int a=1111 1111 1111 1111; Int sum=1111 +1111 +1111 +1111.


2、判断一个字符串是否是回文,如果是,返回字符串“yes”,如果不是,返回字符串“no”。


3、写一个函数比较两个字符串str1和str2的大小,若相等返回0,若str1大于str2返回1,若str1小于str2返回-1,不调用C++/C的字符串的字符库函数,请编写函数strcmp,函数定义为:int strcmp(const char*src,const char*dst)



4、函数sun(int a [],int n)的返回值是数组a[]的前几个元素之和。 请使用递归的非递归两种方式实现。
...全文
694 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_24145057 2014-12-02
  • 打赏
  • 举报
回复
大一 第一个 学期 的 时候 就 已经 完草 了。。。。 不过 使用 c语言。
clydey 2013-01-16
  • 打赏
  • 举报
回复
确实都是大神!~
lee_鹿游原 2013-01-06
  • 打赏
  • 举报
回复

strcmp源码
int __cdecl strcmp (
  const char * src,
  const char * dst
  )
  {
  int ret = 0 ;
  while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
  ++src, ++dst;
  if ( ret < 0 )
  ret = -1 ;
  else if ( ret > 0 )
  ret = 1 ;
  return( ret );
  }
clydey 2013-01-06
  • 打赏
  • 举报
回复
呵呵呵~讨论讨论~
nice_cxf 2013-01-06
  • 打赏
  • 举报
回复
都是很基础的题目。。。。
ChengeBIT 2013-01-06
  • 打赏
  • 举报
回复
都是大神啊~
benbendeda 2013-01-06
  • 打赏
  • 举报
回复
第2,3,4题 上面都说了那么多,我就不说了
benbendeda 2013-01-06
  • 打赏
  • 举报
回复
第一题用位移和与或 此处假设int为4个字节,如要求1234的数字之和

int main()
{
  int a = 0x000f;
  int b = 1234;
  int c = b;
  int d=0;              //结果在d中
  for(int i=0;i<4;i++)
  {
     d += c&a;
     c = b>>4;
  }
  return d;
}
lin5161678 2013-01-06
  • 打赏
  • 举报
回复
第一题不太清晰 我就这样理解了 一个数 2个字节 4bit一个单位 把2个字节划分为4部分 然后把这四部分表示的数字加起来 int a=65535 //1111 1111 1111 1111; int sum=60 //15+15+15+15 == 1111 +1111 +1111 +1111. 以下是代码
#include <stdio.h>
int Calc(unsigned short n){
	char strTest[16];
	sprintf(strTest, "%x", n);
	int bit;
	int sum = 0;
	for(int i=0; i<4; ++i){
		sscanf(strTest+i, "%1x", &bit);
		sum += bit;
	}
	return sum;
}
int main()
{
	printf("%d\n", Calc(65535));
	return 0;
}
alfamoon 2013-01-06
  • 打赏
  • 举报
回复
代码模式 2)
#include <iostream>
#include <string.h>
using namespace std;
int cmp(char *s);
int main()
{
	char s[100];
	cin>>s;
	if(cmp(s)){
		cout<<"Yes"<<endl;
	}
	else{
		cout<<"No"<<endl;
	}
	return 0;
}
int cmp(char *s){
	int num=strlen(s);
	for(int i=0;i<num/2;i++){
	if(s[i]==s[num-1-i]){
		;
	}
	else{
		return 0;
	}
	return 1;
	}
}
3)
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
int my_strcmp(const char *a,const char *b);
int main()
{
	string a,b;
	cin>>a>>b;
	const char *char_a,*char_b;
	char_a=a.c_str();
	char_b=b.c_str();
	switch (my_strcmp(char_a,char_b))
	{
		case 0:
			cout<<"eq"<<endl;	
			break;
		case -1:
			cout<<"small"<<endl;
			break;
		case 1:
			cout<<"big"<<endl;
			break;
		default:
			cout<<"Wrong"<<endl;
			break;
	}
	return 0;
}
int my_strcmp(const char *a,const char *b){
	int i,j,m;
	i=strlen(a);
	j=strlen(b);
	if(i>j){
		m=j;
	}
	else if(j>i){
		m=i;
	}
	else{
		m=i;
	}
	for(int n=0;n<m;n++){
		if(a[n]-b[n]>0){
			return 1;
		}
		else if(a[n]-b[n]<0){
			return -1;
		}
		else {
			;
		}
		
	}
	if(i==j){
	return  0;
	}
	else if(i>j){
		return 1;
	}
	else {
		return -1;
	}
}


4)

#include <iostream>
#define N  5
using namespace std;
int recursion(int *a,int n);
int no_recursion(int *a,int n);
int main()
{
int a[N];
for(int i=0;i<N;i++){
	cin>>a[i];
}
int i,j;
i=recursion(a,4);
j=no_recursion(a,4);
cout<<i<<endl<<j;

return 0;
}
int recursion(int *a,int n){
	if(n==1){
		return a[n-1];
	}
	else{
		return a[n-1]+recursion(a,n-1);
	}
}
int no_recursion(int *a,int n){
	int sum=0;
	for(int i=0;i<n;i++){
		sum+=a[i];
	}
	return sum;
}


alfamoon 2013-01-06
  • 打赏
  • 举报
回复
第一个你的叙述不清 是将a的每四位向加吗 如果是将a变为char然后取每四个组成变为int 在加 其余的 2) #include <iostream> #include <string.h> using namespace std; int cmp(char *s); int main() { char s[100]; cin>>s; if(cmp(s)){ cout<<"Yes"<<endl; } else{ cout<<"No"<<endl; } return 0; } int cmp(char *s){ int num=strlen(s); for(int i=0;i<num/2;i++){ if(s[i]==s[num-1-i]){ ; } else{ return 0; } return 1; } } 3) #include <iostream> #include <string.h> #include <iomanip> using namespace std; int my_strcmp(const char *a,const char *b); int main() { string a,b; cin>>a>>b; const char *char_a,*char_b; char_a=a.c_str(); char_b=b.c_str(); switch (my_strcmp(char_a,char_b)) { case 0: cout<<"eq"<<endl; break; case -1: cout<<"small"<<endl; break; case 1: cout<<"big"<<endl; break; default: cout<<"Wrong"<<endl; break; } return 0; } int my_strcmp(const char *a,const char *b){ int i,j,m; i=strlen(a); j=strlen(b); if(i>j){ m=j; } else if(j>i){ m=i; } else{ m=i; } for(int n=0;n<m;n++){ if(a[n]-b[n]>0){ return 1; } else if(a[n]-b[n]<0){ return -1; } else { ; } } if(i==j){ return 0; } else if(i>j){ return 1; } else { return -1; } } 4) #include <iostream> #define N 5 using namespace std; int recursion(int *a,int n); int no_recursion(int *a,int n); int main() { int a[N]; for(int i=0;i<N;i++){ cin>>a[i]; } int i,j; i=recursion(a,4); j=no_recursion(a,4); cout<<i<<endl<<j; return 0; } int recursion(int *a,int n){ if(n==1){ return a[n-1]; } else{ return a[n-1]+recursion(a,n-1); } } int no_recursion(int *a,int n){ int sum=0; for(int i=0;i<n;i++){ sum+=a[i]; } return sum; }
疯狂的红豆 2013-01-06
  • 打赏
  • 举报
回复
第一题像编程之美的求“1”的个数,目前不会 第二题是我们之前的C实验课题

	char chs [M];
	char ch;
	int count = 0;
	while((ch = getchar()) != '!')
	{
		chs[count++] = ch;
	}
	bool flag = true;
	int left;
	int right;
	for(left=0,right=count-1; left < count/2 -1; left++,right--)
	{
		if(chs[left] != chs[right])
		{
			flag = false;
			break;
		}
	}
	if(flag == true)
	{
		printf("是回文数\n");
	}
	else
	{
		printf("不是回文数\n");
	}
第三题: 较精简的,不过可能会不完善

int MyStrcmp(const char *str1,const char *str2)
{
	while(*str1 == *str2)
	{
		str1++;
		str2++;
	}

	if(*str1 > *str2)
		return 1;
	else if(*str1 < *str2)
		return -1;
	else
		return 0;
}
第四题别人贴过了
Ahh_Freshmeat 2013-01-06
  • 打赏
  • 举报
回复
4 求指导
#include <iostream>
using namespace std;
int sun(int a[], int n);//非递归
int sun1(int a[], int n);//递归

int main()
{
	int a[] = {1, 2, 3, 4};
	cout << sun(a, 2) <<endl;
	cout<< sun1(a, 2) <<endl;

	return 0;
}

int sun(int a[], int n)
{
	int sum = 0;
	for (int i = 0; i<n; ++i)
	{
		sum += a[i];
	}
	return sum;
}
int sun1(int a[], int n)
{
	if (n == 1)
	{
		return a[0];
	}
	else
	{
		return a[n-1] + sun1(a, n-1);
	}
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧