38. }
39. }
40. return0;
41.}
另:
1.#include
2.#include
3.#include
4.
5.usingnamespacestd;
6.
7.inta,b,k;
8.
9.intmain()
10.{
11. while(cin>>a>>b>>k)
12. {
13. if(a==0&&b==0)break;
14. intflag=1;
15. intt=a,t1=b;
16. while(k--)
17. {
18. intr=t%10;
19. t/=10;
20. intr1=t1%10;
21. t1/=10;
22. if(r!
=r1){flag=0;break;}
23. }
24. if(!
flag)printf("%d\n",a+b);
25. elseprintf("-1\n");
26. }
27. return0;
28.}
另:
简单位运算代码
1.#include
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("-1\n");
10. elseprintf("%d\n",a+b);
11. }
12. return0;
13.}
题目是要求末尾k位数字相同,而不是转成二进制后的末尾k位相同。
可以几组case试试:
13881;13841;13821;
另:
//AC
#include
#include
intmain()
{
inta,b,i,j,n;
chars1[10],s2[10],s3[8],s4[8];
while(scanf("%d%d%d",&a,&b,&n),a||b)
{
sprintf(s1,"%08d",a);
sprintf(s2,"%08d",b);
for(i=strlen(s1)-1,j=0;i>=strlen(s1)-n;i--,j++)
s3[j]=s1[i];s3[j]='\0';
for(i=strlen(s2)-1,j=0;i>=strlen(s2)-n;i--,j++)
s4[j]=s2[i];s4[j]='\0';
if(!
strcmp(s3,s4)) printf("-1\n");
elseprintf("%d\n",a+b);
}
return0;
}
另:
1.#include
2.#include
3.intmain()
4.{
5. inta,b,k;
6. while(scanf("%d%d%d",&a,&b,&k)!
=EOF)
7. {
8. inti;
9. intcount=0;
10. if(a==0&&b==0)
11. break;
12. intS=a+b;
13. for(i=0;i14. {
15. if(a%10==b%10)
16. count++;
17. }
18. if(count==k)
19. printf("-1\n");
20. else
21. printf("%d\n",S);
22. }
23. return0;
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位数相同的时候。
最后再翻转过来,按序输出。
1.#include
2.#include
3.#include
4.#include
5.
6.usingnamespacestd;
7.
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){
11. intadd=0;
12. for(inti=top-1;i>=0;i--){
13. c[i]=(x[i]+y[i]+add)%odd[top-i-1];
14. add=(x[i]+y[i]+add)/odd[top-i-1];
15. }
16. returnadd;
17.}
18.
19.intgetright(chara[],intleft){
20. intk=left+1;
21. while(a[k]!
=(char)(0)){
22. if(a[k]==',')break;
23. k++;
24. }
25. returnk;
26.}
27.
28.inttrans(chara[],intleft,intright){
29. intsum=0;
30. for(inti=right-1;i>=left;i--)
31. sum=sum+(a[i]-'0')*(int)pow(10,right-i-1);
32. returnsum;
33.}
34.
35.intmain(void){
36. chara[100],b[100];
37. intc[50],x[50],y[50];
38. intl1,l2,add,count,temp,xtop,ytop,delta,right;
39. while(scanf("%s%s",&a,&b)!
=EOF){
40. l1=strlen(a);
41. l2=strlen(b);
42. if(l1==1&&l2==1&&a[0]=='0'&&b[0]=='0')break;
43. //分析取数
44. xtop=ytop=0;
45. for(inti=0;i46. right=getright(a,i);
47. x[xtop]=trans(a,i,right);
48. xtop++;
49. i=right;
50. }
51. for(inti=0;i52. right=getright(b,i);
53. y[ytop]=trans(b,i,right);
54. ytop++;
55. i=right;
56. }
57.
58. //按长者对位
59. if(xtop60. delta=ytop-xtop;
61. for(inti=0;i62. x[ytop-1-i]=x[ytop-1-i-delta];
63. for(inti=0;i64. x[i]=0;
65. xtop=ytop;
66. }
67. else{
68. if(xtop>ytop){
69. delta=xtop-ytop;
70. for(inti=0;i71. y[xtop-1-i]=y[xtop-1-i-delta];
72. for(inti=0;i73. y[i]=0;
74. ytop=xtop;
75. }
76. }
77.
78. //计算
79. for(inti=0;i80. add=compute(x,y,c,xtop);
81.
82. //输出
83. if(add==1){
84. printf("1,");
85. for(inti=0;i86. printf("%d,",c[i]);
87. printf("%d\n",c[xtop-1]);
88. }
89. else{
90. count=0;
91. for(inti=0;i92. if(c[i]!
=0){
93. count=i;
94. break;
95. }
96. for(inti=count;i97. printf("%d,",c[i]);
98. printf("%d\n",c[xtop-1]);
99. }
100. }
101. return0;
102.}
另:
交流交流
#include
#include
#include
usingstd:
:
cout;
usingstd:
:
cin;
usingstd:
:
endl;
usingstd:
:
string;
usingstd:
:
stringstream;
booljudge(intn){
for(inti=2;i<=n/2;++i){
if(n%i==0)
returnfalse;
}
returntrue;
}
intgenerate(int&i){
for(++i;;++i){
if(judge(i))
returni;
}
}
intmain(){
intsystem,addend1,addend2,carry;
strings1,s2,tmp1,tmp2;
string:
:
iteratoriter1,iter2,preiter1,preiter2;
while(cin>>s1>>s2,s1!
="0"&&s2!
="0"){
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())
--iter1;
if(*iter1==',')
tmp1.assign(iter1+1,preiter1);
elseif(iter1==s1.begin())
tmp1.assign(s1.begin(),preiter1);
preiter1=iter1;
ss1< ss1>>addend1;
}
elseif(size1==1){
ss1< ss1>>addend1;
--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< ss2>>addend2;
}
elseif(size2==1){
ss2< ss2>>addend2;
--size2;
}else
addend2=0;
system=generate(i);
ssres<<(addend1+addend2+carry)%system<<",";
res+=ssres.str();
//cout< carry=(addend1+addend2+carry)/system;
ss1.clear();
ss2.clear();
ssres.clear();
if(iter1==s1.begin()&&iter2==s2.begin()&&carry==0)
break;
}
for(iter1=res.end()-2,preiter1=res.end()-1;iter1!
=res.begin();--iter1){
if(*iter1==','){
for(iter2=iter1+1;iter2!
=preiter1;++iter2)
cout<<*iter2;
cout<<",";
preiter1=iter1;
}
}
for(iter2=res.begin();iter2!
=preiter1;++iter2)
cout<<*iter2< }
return0;
}
另:
1.#include
2.
3.intPrime(intn)
4.{
5. inti;
6. for(i=2;i<=n/2;i++)
7. {
8.