哈尔滨工业大学2010计算机专业机试编程半岛在线注册真题带答案

本站小编 半岛在线注册/2016-02-06

哈工大计算机专业机试编程题(2010)
题目描述:   
    求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。
输入:
    测试数据有多组,输入n,n数据范围不大。
输出:
    对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
样例输入:
6
样例输出:
6

参考答案:
#include<stdio.h>

int main()
{
    int n, i, j, k, a, b[20]={0};   //b[20]存放小于n的完全数

    while(scanf("%d",&n)!=EOF)     //输入一个n
    {
        k = 0;                      //b[k]表示第k+1个完全数,每次输入n后,k清零

        for(i=2;i<=n;i++)           //2~n,寻找完全数
        {
            a = 0;                  //a存放所有约数的和

            for(j=1;j<i;j++)
            {
                if(i%j==0)
                {
                    a+=j;              //判断是否为约数
                }
            }

            if(a==i)            //判断约数和与原数是否相等
            {
                b[k++] = a;
            }
        }

        for(i=0;i<(k-1);i++)    //输出前k-1个完全数
        {
            printf("%d ",b[i]);
        }

        printf("%d\n",b[i]);        //输出第k个
    }

    return 0;
}




题目描述:
给定a和n,计算a+aa+aaa+a...a(n个a)的和。
输入:
测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。
输出:
对于每组输入,请输出结果。
样例输入:
1 10
样例输出:
1234567900

参考答案:
/*----------------------------------------------------------------------
1.本题是一大数求和问题,无法用已知类型表示,故采用数组进行存储。
2.可用数组表示成为一个栈,结果取值从低位到高位依次入栈,然后依次出栈。即s[0]表示为结果中的个位数,s[1]为十位数,依次类推。
3.s[i]的值可由((n - i)*a + temp)%10获得,其中temp为后一位向前的进位,temp 可由 ((n - i)*a + temp)/10表示。temp初始值为0.
4.注意结果如果为0时的情况,例输入 0 2 输出应为0 而不应是00;
-----------------------------------------------------------------------*/

#include<stdio.h>

int main()
{
    int i, a, n, b[50], temp=0, counter;
    while(scanf("%d%d",&a,&n)!=EOF)
    {
        counter = 0;
        temp = 0;
        for(i=0;i<n;i++)
        {
            b[i]=((n-i)*a + temp)%10;
            temp=((n-i)*a + temp)/10;
        }
        b[i]=temp;
        for(i=n;i>=0;i--)


相关话题/计算机