杭电复试笔试题目:2006-2009

2006年 题目1:输入一个十进制的数,把它转成八进制。类似的把十进制转成16进制,把十六进制转变为十进制等。

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
//2006年
//题目1:输入一个十进制的数,把它转成八进制。类似的把十进制转成16进制,把十六进制转变为十进制等。
int main()
{
    int n;//表示输入的数值
    int a[100]={0};//用一个数组来存对应的八进制位数
    scanf("%d",&n);
    int i=0;
    int j;
    while(n!=0){
        a[i]=n%8;
        n/=8;
        i++;
    }
    //然后从后往前输入
    for(j=i-1;j>=0;j--)
        printf("%d",a[j]);


}

题目2:输入两个非常大的整数(完全超出了int、long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果。(
HDU acm 1002用string处理比较好)

这道题还是挺好的:1.首选是需要选择#include<string.h>这个头函数 2.其次是char数组输入是 选%s并且后面不用跟 3.就是关于字符和数字的转换 靠’0’ 4.还有就是相加是从最后一位,也就是数组的最后一位开始的

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
//题目2:输入两个非常大的整数(完全超出了int、long的表示范围),
//这个整数的长度可能超过100位,计算并输出这两个数相加的结果。( HDU acm 1002用string处理比较好)
//我的思路就是,创建三个字符串数组两个用来输入,一个用来最后的输出,
char str1[1000];
char str2[1000];
char str3[1000];
int main()
{
    //先初始化一下
    memset(str1,0,sizeof(str1));
    memset(str2,0,sizeof(str2));
    memset(str3,0,sizeof(str3));
    //输入对应的两个数
    scanf("%s%s",str1,str2);//这里需要注意一下
    int len1=strlen(str1)-1;
    int len2=strlen(str2)-1;//这两个的长度都是需要知道的
    int i=len1;
    int j=len2;
    int k=0;//k是求和之后的存储数组中的值
    int num;//用来存中间值
    int flag=0;//用来存中间的进位
    while(i>=0&&j>=0){//在这两个长度都满足的情况之下
        //开始进行从个位开始加
        num=(str1[i--]-'0')+(str2[j--]-'0');//这里值得注意的是,字符串通过-'0'变成数字(因为数字字符串就是'0’这个位置加上对应数字向前进几位
        num+=flag;
        flag=(num/10);//这就相当于下一个了
        num%=10;
        str3[k++]=num+'0';
    }
    //然后可能会存在两个数值的长度不一样,所以会让有一个更进一步
    while(i>=0){
        num=str1[i--]-'0';
        num+=flag;
        flag=(num/10);
        num%=10;
        str3[k++]=num+'0';
    }
     while(i>=0){
        num=str2[i--]-'0';
        num+=flag;
        flag=(num/10);
        num%=10;
        str3[k++]=num+'0';
    }
    //这里还有一点,还要看最后一个进位
    if(flag==1)
        str3[k++]=1+'0';
    //然后开始输出
    for(j=k-1;j>=0;j--)
        printf("%c",str3[j]);


}



2007年
题目1:回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
//2007年
//题目1:回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
char str[100];
int main()
{
    //输入字符
     scanf("%s",str);
     int len=strlen(str);
     int i,j;
     int flag=0;
     for(i=0,j=len-1;i<=j;j--,i++){//这个i和j的关系需要注意一下
        if(str[i]!=str[j])
            flag=1;
     }

     if(flag==1)
        printf("NO");
     else
        printf("YES");


}

题目2:输入n个数,按从小到大进行排序并输出。

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
//题目2:输入n个数,按从小到大进行排序并输出。
//就直接sort排序吧
char str[100];
int main()
{
    int a[1000];
    int n;//这个是输入的数
    int i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    //再直接用sort的默认排序
    sort(a,a+n);
    for(i=0;i<n;i++)
        printf("%d ",a[i]);

}

题目1:输入一个长整型的数,从低位起取出奇数位组成一个新的数输出。

值得注意的是,长整型是Ld

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include <math.h>
using namespace std;
//题目1:输入一个长整型的数,从低位起取出奇数位组成一个新的数输出。
int main()
{
    long int num,sum,temp;//这是要输入的值,最终值,中间值
    scanf("%ld",&num);
    sum=0;
    int k=0;//这个是10的次方
    //是需要用到/和%
    while(num!=0){
        //先取第一位
        temp=num%10;
        sum+=(temp*pow(10,k));
        k++;
        num/=100;//因为直接跳过下一个
    }
    printf("%ld",sum);
}

题目2:输入n个字符串,将它们按字母由小到大的顺序排列并输出。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#define MAX 100
using namespace std;
bool cmp(string x,string y)//strcmp(x,y)若x==y,则返回零;若x<y,则返回负数;若x>y,则返回正数。
{
	if(strcmp(x.c_str(),y.c_str())==1)
		return false;
	return true;
}
int main()
{
	int n;
	string str[MAX];
	while(scanf("%d",&n)!=EOF)
	{
		for(int i=0;i<n;i++)
			scanf("%s",str[i].c_str());
		sort(str,str+n,cmp);
		for(int i=0;i<n;i++)
            printf("%s ",str[i].c_str());
	}
}


2009年: 题目1:输入两个正整数,求出这两个数的最大公约数。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
//2009年:
//题目1:输入两个正整数,求出这两个数的最大公约数。
int main()
{
    //就是之前学的辗转相除法
    int a,b;//两个需要输入的正整数
    int temp;
    scanf("%d%d",&a,&b);
    //需要判断这两个的大小
    if(a>b){
        temp=a;
        a=b;
        b=temp;
    }
    while(b!=0){
       temp=b%a;
       a=b;
       b=temp;
    }
    printf("%d",a);
}

题目2:水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3,输入一个整数,判断它是否是水仙花数

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
//题目2:水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3,输入一个整数,判断它是否是水仙花数。
//写一个方法求立方
int lifang(int x){
    return x*x*x;
}
int main()
{
    int n,m;//写一个三位数
    int sum=0;
    int temp;
    scanf("%d",&n);
    m=n;
    while(n){//依次求个十百位
        temp=n%10;
        sum+=lifang(temp);
        n/=10;
    }
    if(sum==m)
        printf("YES");
    else
        printf("NO");

}

题目3:完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。输入一个整数,判断它是否是完数。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
//题目3:完数的定义:
//如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。输入一个整数,判断它是否是完数。
//写一个方法判断是否为因子
bool yingzi(int x,int y){
    if(x%y==0)
        return true;
    return false;
}
int main()
{
    int n;//输入整数
    scanf("%d",&n);
    int i;
    int sum=0;
    for(i=1;i<n;i++){
        if(yingzi(n,i))
            sum+=i;
    }
    if(sum==n)
        printf("YES");
    else
        printf("NO");

}
发布了72 篇原创文章 · 获赞 5 · 访问量 2807

猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/104941589
今日推荐