哈尔滨工业大学2012-2009计算机研究生考试机试编程带答案(3)

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


                }
            }

            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--)
        {
            if(b[i]==0)
            {
                counter++;
            }
        }
        if(counter==(n+1))     //结果全零,不能输出n个零
            printf("%d",b[0]);
        else                        //如果不全零,只能是n位或n+1位
        {
            if(b[n]!=0)
                printf("%d",b[n]);
            for(i=n-1;i>=0;i--)
            {
                printf("%d",b[i]);
            }
        }
        printf("\n");
    }
    return 0;
}


题目描述:
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出:
对于每组输入,请输出结果。
样例输入:

相关话题/计算机