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