安徽大学计算机机试OJ练习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、编程题

值日&&高精度加法

标签:枚举

2017年11月26日17:32:30 133人阅读评论(0) 收藏举报分类:

编程题(72)

版权声明:本文为博主原创文章,未经博主允许不得转载。

https:///zhagoodwell/article/details/78638380

目录(?)[+] C. 值日

运行时间<1000 ms 单次测试运行时间限制: 1000 ms 内存限制:64 MB

总提交: 2次通过: 1次

题目描述

今天轮到pw值日了。值日可是一个体力活。Pw首先擦黑板,pw定睛一看黑板,嘿呀,怎么上边有一堆奇奇怪怪的数字。再一看,原来是今天留的一道数学题。赶巧数学老师进来了,pw急忙上前去请教。

老师说:“这不是AHU新生赛“值日的后续”那题吗?”,老师边讲边翻开课本,“给出一个正整数x,求得x和其各位9数字之和是多少?挺简单的吧?你是不是……”

然而今天题目没那么简单。现在已知一个数字和其各位数字之和为n,请求出有几个数字x,满足题目叙述的要求。如果存在这样的数字,请先输出这样数字的个数,再按照从小到大的顺序依次输出这些数字,否则输出0。

程序输入说明

一个数字n(1<=n<=10^9)

用EOF判断读入是否结束

提示

对于第一组数据,有一个数字15满足15+5+1=21。

对于第二组数据,找不到满足题意的的数字,故输出0。

个人理解这个只需要估算一下10^9如果每一位都是9 则最多就81 所以只要在n-100のn之间枚举即可

[objc]view plain copy

print?

1.# include

2.# define N 101

3.int AS(int a);

4.int A[N];

5.int i,k;

6.int main()

7.{

8. int i,n;

9. while(scanf("%d",&n)!=EOF)

10. {

11. for(i=n-100,k=0;i

12. if(AS(i)==n)A[k++]=i;

13. printf("%d\n",k);

14. for(i=0;i

15. printf("%d\n",A[i]);

16. }

17. return 0;

18.}

19.int AS(int a){

20. int sum=a;

21. while(a)

22. {

23. sum+=a%10;

24. a/=10;

25. }

26. return sum;

27.}

高精度加法

运行时限: 1000 ms 单次运行时限: 1000 ms 内存限制: 64 MB

总提交: 78次通过: 27次

题目描述

输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

算法描述

由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。计算c = a + b 的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。最后将C输出即可。

[objc]view plain copy

print?

1.# include

2.# define N 101

3.char A[N],B[N];

4.int C[N+2];

5.int main(){

6. int a=-1,b=-1,c=-1,i,j;

7. //freopen("AAA.txt","r",stdin);

8. gets(A);

9. while(A[++a])A[a]-=48;

10. gets(B);

11. while(B[++b])B[b]-=48;

12. i=a+1;j=b+1;

13. do{

14. i--;j--;

15. if(i&&j==-1)C[++c]+=A[i];

16. else if(i==-1&&j)C[++c]+=B[j];

17. else C[++c]+=A[i]+B[j];

18. if(C[c]>9)

19. {

20. C[c+1]+=C[c]/10;

21. C[c]%=10;

22. }

23. if(i==-2)i=-1;

24. if(j==-2)j=-1;

25. }while(i>-1||j>-1);

26. while(!C[c])c--;

27. while(c)printf("%d",C[c--]);

28. printf("\n");

29. return 0;

30.}

二、编程题

AHU ACM实验室11/13新生兴趣赛Round2 AOJ 180 E. A+B Problem (0 + EOL)

年11月17日08:53:42

•标签:

•acm/

•AOJ

•371

被这么一个输出搞到PE了八次我也是被自己的智商惊讶到了… TAT

所以以后要记住这种输出

每两个输出中间隔一个空行

最后一个输出只有一个换行符。

相关文档
最新文档