浙江大学06计算机上机题含答案Word文档下载推荐.docx

上传人:b****3 文档编号:16443249 上传时间:2022-11-23 格式:DOCX 页数:38 大小:27.51KB
下载 相关 举报
浙江大学06计算机上机题含答案Word文档下载推荐.docx_第1页
第1页 / 共38页
浙江大学06计算机上机题含答案Word文档下载推荐.docx_第2页
第2页 / 共38页
浙江大学06计算机上机题含答案Word文档下载推荐.docx_第3页
第3页 / 共38页
浙江大学06计算机上机题含答案Word文档下载推荐.docx_第4页
第4页 / 共38页
浙江大学06计算机上机题含答案Word文档下载推荐.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

浙江大学06计算机上机题含答案Word文档下载推荐.docx

《浙江大学06计算机上机题含答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《浙江大学06计算机上机题含答案Word文档下载推荐.docx(38页珍藏版)》请在冰豆网上搜索。

浙江大学06计算机上机题含答案Word文档下载推荐.docx

14. 

num/=10;

15. 

}

16. 

str[i]='

\0'

;

17.}

18.intmain()

19.{

20. 

inta,b,k;

21. 

charcha[10],chb[10];

22. 

//fstreamcin("

1015.txt"

);

23. 

while(cin>

>

a>

b,a+b)

24. 

25. 

cin>

26. 

split(a,k,cha);

27. 

split(b,k,chb);

28. 

stringstra(cha);

29. 

stringstrb(chb);

30. 

if(stra==strb)

31. 

32. 

33. 

cout<

<

"

-1"

endl;

34. 

35. 

else

36. 

37. 

a+b<

38. 

39. 

40. 

return0;

41.}

另:

1.#include<

2.#include<

cstdio>

3.#include<

cstring>

4.

5.usingnamespacestd;

6.

7.inta,b,k;

8.

9.intmain()

10.{

while(cin>

b>

k)

if(a==0&

&

b==0)break;

intflag=1;

intt=a,t1=b;

while(k--)

17. 

18. 

intr=t%10;

19. 

t/=10;

intr1=t1%10;

t1/=10;

if(r!

=r1){flag=0;

break;

}

if(!

flag)printf("

%d\n"

a+b);

elseprintf("

-1\n"

28.}

简单位运算代码

stdio.h>

2.

3.inta,b,k;

4.intmain()

5.{

6. 

while(scanf("

%d%d%d"

&

a,&

b,&

k))

7. 

8. 

 

if(0==a&

0==b)break;

9. 

if(a<

(32-k)==b<

(32-k))printf("

elseprintf("

13.}

题目是要求末尾k位数字相同,而不是转成二进制后的末尾k位相同。

可以几组case试试:

13881;

13841;

13821;

//AC

#include<

string.h>

intmain()

{

inta,b,i,j,n;

chars1[10],s2[10],s3[8],s4[8];

while(scanf("

%d%d%d"

n),a||b)

sprintf(s1,"

%08d"

a);

sprintf(s2,"

b);

for(i=strlen(s1)-1,j=0;

i>

=strlen(s1)-n;

i--,j++)

s3[j]=s1[i];

s3[j]='

for(i=strlen(s2)-1,j=0;

=strlen(s2)-n;

s4[j]=s2[i];

s4[j]='

if(!

strcmp(s3,s4)) 

printf("

return0;

3.intmain()

4.{

5. 

k)!

=EOF)

intcount=0;

if(a==0&

b==0)

intS=a+b;

for(i=0;

if(a%10==b%10)

count++;

if(count==k)

S);

24.}

二、火星A+B

读入两个不超过25位的火星正整数A和B,计算A+B。

在火星上,整数不是单一进制的,第n位的进制就是第n个素数。

例如:

地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;

地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……

测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。

当A或B为0时输入结束,相应的结果不要输出。

对每个测试用例输出1行,即火星表示法的A+B的值。

1,02,1

4,2,01,2,0

110,6,4,2,1

00

1,0,1

1,1,1,0

1,0,0,0,0,0

按筛法求出素数30个,放在数组中。

把输入的A和B转化为int型数组,翻转,翻转是为了好求,对应位置相加时,若超出对应位置的素数的范围则进位。

这里要注意越界,尤其A和B位数相同的时候。

最后再翻转过来,按序输出。

math.h>

8.intodd[26]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101};

9.

10.intcompute(intx[],inty[],intc[],inttop){

intadd=0;

for(inti=top-1;

=0;

i--){

c[i]=(x[i]+y[i]+add)%odd[top-i-1];

add=(x[i]+y[i]+add)/odd[top-i-1];

returnadd;

17.} 

18.

19.intgetright(chara[],intleft){

intk=left+1;

while(a[k]!

=(char)(0)){

if(a[k]=='

'

)break;

k++;

returnk;

26.}

27.

28.inttrans(chara[],intleft,intright){

intsum=0;

for(inti=right-1;

=left;

i--)

sum=sum+(a[i]-'

0'

)*(int)pow(10,right-i-1);

returnsum;

33.}

34.

35.intmain(void){

chara[100],b[100];

intc[50],x[50],y[50];

intl1,l2,add,count,temp,xtop,ytop,delta,right;

%s%s"

b)!

=EOF){

l1=strlen(a);

41. 

l2=strlen(b);

42. 

if(l1==1&

l2==1&

a[0]=='

b[0]=='

43. 

//分析取数

44. 

xtop=ytop=0;

45. 

for(inti=0;

l1;

i++){

46. 

right=getright(a,i);

47. 

x[xtop]=trans(a,i,right);

48. 

xtop++;

49. 

i=right;

50. 

51. 

l2;

52. 

right=getright(b,i);

53. 

y[ytop]=trans(b,i,right);

54. 

ytop++;

55. 

56. 

57. 

58. 

//按长者对位

59. 

if(xtop<

ytop){

60. 

delta=ytop-xtop;

61. 

xtop;

62. 

x[ytop-1-i]=x[ytop-1-i-delta];

63. 

delta;

64. 

x[i]=0;

65. 

xtop=ytop;

66. 

67. 

else{

68. 

if(xtop>

69. 

delta=xtop-ytop;

70. 

for(inti=0;

ytop;

71. 

y[xtop-1-i]=y[xtop-1-i-delta];

72. 

73. 

y[i]=0;

74. 

ytop=xtop;

75. 

76. 

77. 

78. 

//计算

79. 

i++)c[i]=0;

80. 

add=compute(x,y,c,xtop);

81. 

82. 

//输出

83. 

if(add==1){

84. 

printf("

1,"

85. 

xtop-1;

86. 

%d,"

c[i]);

87. 

c[xtop-1]);

88. 

89. 

else{ 

90. 

count=0;

91. 

92. 

if(c[i]!

=0){

93. 

count=i;

94. 

break;

95. 

96. 

for(inti=count;

97. 

98. 

99. 

100. 

101. 

102.}

交流交流

sstream>

usingstd:

:

cout;

cin;

string;

stringstream;

booljudge(intn){

for(inti=2;

=n/2;

++i){

if(n%i==0)

returnfalse;

returntrue;

intgenerate(int&

i){

for(++i;

if(judge(i))

returni;

intmain(){

intsystem,addend1,addend2,carry;

strings1,s2,tmp1,tmp2;

string:

iteratoriter1,iter2,preiter1,preiter2;

s1>

s2,s1!

="

0"

s2!

){

stringres;

inti=1;

intsize1=s1.size(),size2=s2.size();

for(iter1=s1.end()-1,iter2=s2.end()-1,preiter1=s1.end(),preiter2=s2.end(),carry=0;

stringstreamss1,ss2,ssres;

if(iter1!

=s1.begin()){

--iter1;

while(*iter1!

='

&

iter1!

=s1.begin())

if(*iter1=='

tmp1.assign(iter1+1,preiter1);

elseif(iter1==s1.begin())

tmp1.assign(s1.begin(),preiter1);

preiter1=iter1;

ss1<

tmp1;

ss1>

addend1;

elseif(size1==1){

ss1<

s1;

ss1>

--size1;

}else

addend1=0;

if(iter2!

=s2.begin()){

--iter2;

while(*iter2!

iter2!

=s2.begin())

--iter2;

if(*iter2=='

tmp2.assign(iter2+1,preiter2);

elseif(iter2==s2.begin())

tmp2.assign(s2.begin(),preiter2);

preiter2=iter2;

ss2<

tmp2;

ss2>

addend2;

elseif(size2==1){

ss2<

s2;

ss2>

--size2;

addend2=0;

system=generate(i);

ssres<

(addend1+addend2+carry)%system<

"

res+=ssres.str();

//cout<

res<

endl<

carry=(addend1+addend2+carry)/system;

ss1.clear();

ss2.clear();

ssres.clear();

if(iter1==s1.begin()&

iter2==s2.begin()&

carry==0)

for(iter1=res.end()-2,preiter1=res.end()-1;

iter1!

=res.begin();

--iter1){

for(iter2=iter1+1;

iter2!

=preiter1;

++iter2)

cout<

*iter2;

preiter1=iter1;

for(iter2=res.begin();

*iter2<

3.intPrime(intn)

for(i=2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1